Mvp练习题 电影滑动

来源:互联网 发布:淘宝卖家发货幽默短信 编辑:程序博客网 时间:2024/06/15 11:34

final String catalogId = "402834815584e463015584e539330016";

 

String HOST = "http://api.svipmovie.com/front/

//影片分类

columns/getVideoList.do

参数:catalogId 分类id  已经给出

      pnum 传入  为能随机获取视频请传入getNextPage(),此方法已经给出

 

private int getNextPage() {        if (SystemUtils.isNetworkConnected()) {        page = StringUtils.getRandomNumber(1, 108);    }    return page;}

public static int getRandomNumber(int min, int max) {    return new Random().nextInt(max) % (max - min + 1) + min;} ////////////////////////////////////////////////////////////////接口

////////////////////////////////1
package com.example.zk2.view;public interface Iview {    void onSuccess(Object o);    void onFailed(Exception e);

}

////////////////////////////////////2

package com.example.zk2.model;import java.util.Map;public interface Imodel {    void getData(Map<String,String> map);}
/////////////////////////////////////3
package com.example.zk2.persenter;import java.util.Map;public interface BasePresenter {    void getData(Map<String,String> map);}

//////////////////////////////////////4Bean类

//////////////////////////////////////5

package com.example.zk2.http;import com.example.zk2.bean.Dabean;import java.util.Map;import io.reactivex.Flowable;import retrofit2.http.POST;import retrofit2.http.QueryMap;public interface ApiService {    @POST("columns/getVideoList.do")    Flowable<Dabean> getNews(@QueryMap  Map<String, String> map);}


////////////////////////////////////6

package com.example.zk2.http;import retrofit2.Retrofit;import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;public class RetrofitUtils {    private  static  volatile RetrofitUtils instance;    private final ApiService apiService;    private RetrofitUtils(){        Retrofit retrofit=new Retrofit.Builder()                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                .baseUrl("http://api.svipmovie.com/front/")
                .client(new OkHttpClient.Builder().build())
.build(); apiService = retrofit.create(ApiService.class);
 }    
public static  RetrofitUtils getInstance(){  
      if (instance==null){      
      synchronized (RetrofitUtils.class){     
           if (null==instance){          
          instance=new RetrofitUtils();       
         }            }        }      
  return  instance;    }  
  public ApiService getApiService(){    
    return  apiService;    }}

///////////////////////////////////////7

package com.example.zk2.model;import android.util.Log;import com.example.zk2.bean.Dabean;import com.example.zk2.http.RetrofitUtils;import com.example.zk2.persenter.NewsPresenter;import java.util.Map;import io.reactivex.Flowable;public class NewsModel implements Imodel {    private NewsPresenter presenter;    public NewsModel(NewsPresenter presenter){        this.presenter=presenter;    }    @Override    public void getData(Map<String, String> map) {        Flowable<Dabean> news = RetrofitUtils.getInstance().getApiService().getNews(map);        presenter.getNews(news);        Log.e("TAG","请求==="+map.toString());    }}

////////////////////////////////////////8

package com.example.zk2.persenter;import android.util.Log;import com.example.zk2.bean.Dabean;import com.example.zk2.model.Imodel;import com.example.zk2.model.NewsModel;import com.example.zk2.view.Iview;import java.util.Map;import io.reactivex.Flowable;import io.reactivex.android.schedulers.AndroidSchedulers;import io.reactivex.schedulers.Schedulers;import io.reactivex.subscribers.DisposableSubscriber;public class NewsPresenter implements BasePresenter{    private Iview iv;    private DisposableSubscriber subscriber;    public  void attacView(Iview iv){        this.iv=iv;    }    public void detachView(){        if (iv!=null){            iv=null;        }        if (subscriber!=null){//rxjava的防止内存泄漏            if (!subscriber.isDisposed()){                subscriber.isDisposed();            }        }    }    public void getNews(Flowable<Dabean> news){        news.subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribeWith(new DisposableSubscriber<Dabean>() {                    @Override                    public void onNext(Dabean dabean) {                        if (dabean!=null){                            Log.d("aaaaa", "onNext: ++++++"+dabean.toString());                                iv.onSuccess(dabean);                        }                    }                    @Override                    public void onError(Throwable t) {                    }                    @Override                    public void onComplete() {                    }                });    }    @Override    public void getData(Map<String, String> map) {        Imodel model=new NewsModel(this);//多态  this是当前的p层、        model.getData(map);        Log.e("TAG","sss");    }}
////////////////////////////////////////9
package com.example.zk2.adapter;import android.support.v4.view.ViewPager;import android.view.View;public class ZoomOutPageTransformer implements ViewPager.PageTransformer {    private static final float MIN_SCALE = 0.85f;    private static final float MIN_ALPHA = 0.5f;    @Override    public void transformPage(View view, float position) {        int pageWidth = view.getWidth();        int pageHeight = view.getHeight();        if (position < -1) { // [-Infinity,-1) 不可见状态            // This page is way off-screen to the left.            view.setAlpha(0); //透明度设置为0        } else if (position <= 1) { // [-1,1] 可见状态,设置动画效果            // Modify the default slide transition to shrink the page as well            float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));            float vertMargin = pageHeight * (1 - scaleFactor) / 2;            float horzMargin = pageWidth * (1 - scaleFactor) / 2;            if (position < 0) {                view.setTranslationX(horzMargin - vertMargin / 2);            } else {                view.setTranslationX(-horzMargin + vertMargin / 2);            }            // Scale the page down (between MIN_SCALE and 1)            view.setScaleX(scaleFactor);            view.setScaleY(scaleFactor);            // Fade the page relative to its size.            view.setAlpha(MIN_ALPHA +                    (scaleFactor - MIN_SCALE) /                            (1 - MIN_SCALE) * (1 - MIN_ALPHA));        } else { // (1,+Infinity] 不可见状态            // This page is way off-screen to the right.            view.setAlpha(0);        }    }}

///////////////////////////////////////////10
package com.example.zk2.fragment;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;import com.bumptech.glide.Glide;import com.example.zk2.R;import com.example.zk2.adapter.ZoomOutPageTransformer;import com.example.zk2.bean.Dabean;import com.example.zk2.persenter.NewsPresenter;import com.example.zk2.view.Iview;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Random;public class Fragment3 extends Fragment implements Iview{    private ViewPager viewPager;    private NewsPresenter presenter;    private Button button;    private List<Dabean.RetBean.ListBean> list;    private Map<String, String> map = new HashMap<>();    private PagerAdapter pagerAdapter;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment3, container, false);        viewPager = view.findViewById(R.id.vp);        button =  view.findViewById(R.id.buton);        return view;    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        initView();        viewPager.setPageTransformer(true, new ZoomOutPageTransformer());        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                if(list!=null){                    list.clear();                }                initView();                pagerAdapter.notifyDataSetChanged();            }        });    }    private void initView() {        map.put("catalogId","402834815584e463015584e539330016");        map.put("pnum",getpage()+"");        presenter = new NewsPresenter();        presenter.attacView(this);        presenter.getData(map);    }    //防止内存泄漏    @Override    public void onDestroy() {        super.onDestroy();        if (presenter!=null){            presenter.detachView();        }    }    @Override    public void onSuccess(Object o) {        Dabean bean= (Dabean) o;        list = bean.getRet().getList();        pagerAdapter = new PagerAdapter() {            @Override            public int getCount() {                return list.size();            }            @Override            public boolean isViewFromObject(View view, Object object) {                return view == object;            }            @Override            public Object instantiateItem(ViewGroup container, int position) {                Dabean.RetBean.ListBean listBean = list.get(position);                View v = View.inflate(getActivity(), R.layout.item, null);                ImageView img = v.findViewById(R.id.img);                TextView title = v.findViewById(R.id.tv_title);                TextView tvt = v.findViewById(R.id.name);                title.setText(listBean.getTitle());                tvt.setText(listBean.getDescription());                Glide.with(getActivity()).load(listBean.getPic()).into(img);                container.addView(v);                Log.e("--------适配器的数据:", listBean.getTitle());                return v;            }            @Override            public void destroyItem(ViewGroup container, int position, Object object) {                container.removeView((View) object);            }        };        viewPager.setAdapter(pagerAdapter);    }    @Override    public void onFailed(Exception e) {    }    //随机数    private int getpage() {        int max = 108;        int min = 1;        Random random = new Random();        int s = random.nextInt(max) % (max - min + 1) + min;        return s;    }}