viewPager最简单无限轮播加左右滑动

首先是xml布局:

<androidx.viewpager.widget.ViewPager    android:id="@+id/loopviewpager"    android:layout_width="match_parent"    android:layout_height="150dp" />

主类:

public class PushOfferActivity extends Activity {
    private ViewPager viewPager;  //轮播图模块    private int[] mImg;    private ArrayList<ImageView> mImgList;    private LinearLayout ll_dots_container;    private int previousSelectedPosition = 0;//点的位置    boolean isRunning = false;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_push);        initLoopView();  //实现轮播图    }
    private void initLoopView() {
        Point p = Common.getInstance().getRelSize();        int width = p.x;        viewPager = (ViewPager)findViewById(R.id.loopviewpager);        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width,width*4/5);        viewPager.setLayoutParams(params);        ll_dots_container = (LinearLayout)findViewById(R.id.ll_dots_loop);        // 图片资源id数组        mImg = new int[]{
                R.drawable.logo_1,                R.drawable.logo_2,                R.drawable.logo_3,        };        // 初始化要展示的5个ImageView        mImgList = new ArrayList<ImageView>();        ImageView imageView;        View dotView;        LinearLayout.LayoutParams layoutParams;        for(int i=0;i<mImg.length;i++){
            //初始化要显示的图片对象            imageView = new ImageView(this);            imageView.setBackgroundResource(mImg[i]);            mImgList.add(imageView);            //加引导点            dotView = new View(this);            dotView.setBackgroundResource(R.drawable.dot);            layoutParams = new LinearLayout.LayoutParams(15,15);            if(i!=0){
                layoutParams.leftMargin=10;            }
            //设置默认所有都不可用            dotView.setEnabled(false);            ll_dots_container.addView(dotView,layoutParams);        }

        ll_dots_container.getChildAt(0).setEnabled(true);        previousSelectedPosition=0;        //设置适配器        viewPager.setAdapter(new LoopViewAdapter(mImgList));        // 开启轮询        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override            public void onPageScrolled(int i, float v, int i1) {

            }
            @Override            public void onPageSelected(int i) {
                int newPosition = i % mImgList.size();                ll_dots_container.getChildAt(previousSelectedPosition).setEnabled(false);                ll_dots_container.getChildAt(newPosition).setEnabled(true);                previousSelectedPosition = newPosition;            }

            @Override            public void onPageScrollStateChanged(int i) {

            }
        });        new Thread(){
            public void run(){
                isRunning = true;                while(isRunning){
                    try{
                        Thread.sleep(3000);                    } catch (InterruptedException e) {
                        e.printStackTrace();                    }
                    //下一条                    runOnUiThread(new Runnable() {
                        @Override                        public void run() {
                            if(viewPager.getCurrentItem() ==mImgList.size()-1){
                                viewPager.setCurrentItem(0);                            }else{
                                viewPager.setCurrentItem(viewPager.getCurrentItem()+1);                            }
                        }
                    });                }
            }
        }.start();    }
}

适配器:

private ArrayList<ImageView> imageViewList;public LoopViewAdapter(ArrayList<ImageView> mImgList) {
    imageViewList = mImgList;}
// 1. 返回要显示的条目内容, 创建条目@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {
    container.addView(imageViewList.get(position), 0);    return imageViewList.get(position);}

@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
    container.removeView(imageViewList.get(position));}

@Overridepublic int getCount() {
    return imageViewList.size();}

@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
    return view == o;}

这里我说有,网上有的说将getCount设置为无限大,这样就能过实现轮播,我当时也试了,可以,但是!!!!!这个时候你反方向滑动就会出现崩溃!!!!

举报
评论 0