1. 程式人生 > >無限輪播圖

無限輪播圖

1.Applation設定全域性(記得在清單檔案中註冊)

public class App extends Application {

@Override
public void onCreate() {
    super.onCreate();

    ImageLoader.getInstance().init(
            new ImageLoaderConfiguration.Builder(this)
                    .memoryCacheSizePercentage(10)
                    .discCacheSize(50 * 1024 * 1024)
                    .defaultDisplayImageOptions(
                            new DisplayImageOptions.Builder()
                                    .showImageOnFail(R.mipmap.ic_launcher)
                                    .showImageOnLoading(R.mipmap.ic_launcher)
                                    .cacheInMemory(true)
                                    .cacheOnDisk(true)
                                    .build()
                    )
                    .build()
    );
}
}

2.Fragment頁面

public class Fone extends Fragment {
    private ViewPager pager;
    private TextView textView;
    private LinearLayout layout;
    private PhotoBase photoBase;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
   	 //載入檢視
        View v = inflater.inflate(R.layout.fone,container,false);
        //獲取資源ID
        pager = v.findViewById(R.id.photo_pager);
        textView = v.findViewById(R.id.text);
        layout = v.findViewById(R.id.itemlayout);
        photoBase = new PhotoBase(getActivity());
        return v;
    }

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    //新增介面卡
    pager.setAdapter(photoBase);

    //設定監聽
    pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        //快取的點
        private int cacheIndex = -1;
        @Override
        public void onPageScrolled(int i, float v, int i1) {

        }

        @Override
        public void onPageSelected(int i) {
            //給textview重新賦值
            textView.setText(photoBase.getItem(i).getDescription());
            //改變當前的點
            layout.getChildAt(i % layout.getChildCount()).setSelected(true);
            //還原原來的點
            if(cacheIndex >= 0){
                layout.getChildAt(cacheIndex % layout.getChildCount()).setSelected(false);
            }
            cacheIndex = i;
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });
    initdata();
}
//3.輪播
private void initdata(){
    NetUtil.getJson("https://api.tianapi.com/wxnew/?key=c4aa776e0a51d57d6750511e2baa46b6&num=6&page=1", PhotoBean.class, new NetUtil.CallBack<PhotoBean>() {
        @Override
        public void success(PhotoBean o) {
            photoBase.setdata(o.getNewslist());
            initcir(o.getNewslist().size());
            //得到圖片播放位置
            int count = photoBase.getCount()/2;
            count = count - count%o.getNewslist().size();
            //設定圖片播放位置
            pager.setCurrentItem(count);
            startlooper();
        }
    });
}
//1.無線輪播
@SuppressLint("HandlerLeak")
private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        pager.setCurrentItem(pager.getCurrentItem()+1);
        handler.sendEmptyMessageDelayed(0,2000);
    }
};
//2.開始輪播
private void startlooper(){
    handler.removeMessages(0);
    handler.sendEmptyMessageDelayed(0,2000);
}
//初始化小圓點
private void initcir(int size){
    layout.removeAllViews();
    for(int i = 0;i < size;i++){
        ImageView imageView = new ImageView(getActivity());
        imageView.setBackgroundResource(R.drawable.selectyd);
        //佈局引數
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics());
        params.rightMargin = margin;
        params.leftMargin = margin;
        layout.addView(imageView,params);
    }
}
}

3.Bean類

public class PhotoBean {

private int code;
private List<NewslistBean> newslist;

public int getCode() {
    return code;
}

public void setCode(int code) {
    this.code = code;
}

public List<NewslistBean> getNewslist() {
    return newslist;
}

public void setNewslist(List<NewslistBean> newslist) {
    this.newslist = newslist;
}

public static class NewslistBean {

    private String description;
    private String picUrl;

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getPicUrl() {
        return picUrl;
    }

    public void setPicUrl(String picUrl) {
        this.picUrl = picUrl;
    }
}
}

4.介面卡

public class PhotoBase extends PagerAdapter {
    private Context context;
    private List<PhotoBean.NewslistBean> list;

public PhotoBase(Context context) {
    this.context = context;
    list = new ArrayList<>();
}

@Override
public int getCount() {
    return list.size() > 0 ? 5000:0;
}
public PhotoBean.NewslistBean getItem(int position){
    return list.get(position%list.size());
}

public void setdata(List<PhotoBean.NewslistBean> lists){
    list.clear();
    list.addAll(lists);
    notifyDataSetChanged();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
    return view == o;
}

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    ImageView imageView = new ImageView(context);
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    container.addView(imageView);
    ImageLoader.getInstance().displayImage(getItem(position).getPicUrl(),imageView);
    return imageView;
}

@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
    container.removeView((View) object);
}
}