viewpager 無限輪播


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/point_red" android:state_enabled="true"></item>
    <item android:drawable="@drawable/point_green" android:state_enabled="false"></item>
</selector>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="@android:color/holo_green_light"></solid>
</shape>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="@android:color/holo_red_light"></solid>
</shape>

佈局:

<android.support.v4.view.ViewPager
    android:id="@+id/vp"
    android:layout_width="match_parent"
    android:layout_height="480dp"/>
<LinearLayout
    android:id="@+id/ll_point"
    android:layout_width="match_parent"
    android:layout_height="20dp"
    android:orientation="horizontal"
    android:layout_alignBottom="@id/vp"
    android:layout_marginBottom="20dp"
    android:gravity="center"></LinearLayout>

代碼:

public class MainActivity extends AppCompatActivity {

    private ViewPager vp;
    private LinearLayout ll_point;
    private List<ImageView> images = new ArrayList<>();
    private int [] x = new int[]{R.mipmap.a,R.mipmap.b,R.mipmap.c};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        initView();
        initViewPager();

    }

    private void initView() {
        vp = (ViewPager) findViewById(R.id.vp);
        ll_point = (LinearLayout) findViewById(R.id.ll_point);
    }

    private void initViewPager() {
        for (int i = 0; i < x.length; i++) {
            ImageView imageView = new ImageView(MainActivity.this);
            imageView.setImageResource(x[i]);
            images.add(imageView);
        }
        MyAdapter adapter = new MyAdapter();
        vp.setAdapter(adapter);

        initPoint();
        vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                //獲取小圓點數據
                int count = ll_point.getChildCount();
                for (int i = 0; i < count; i++) {
                    View view = ll_point.getChildAt(i);
                    //頁面改變時選中小圓點
                    view.setEnabled(i == position ? false : true);

                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    private void initPoint() {
        for (int i = 0; i < images.size(); i++) {
            //   Toast.makeText(MainActivity.this, "圖片個數:"+images.size(), Toast.LENGTH_SHORT).show();
            //創建小圓點控件
            View view = new View(this);
            //設置背景選擇器
            view.setBackgroundResource(R.drawable.point_bg);
            //創建小圓點大小
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20, 20);
            //創建小圓點間距
            params.rightMargin = 10;
            //把小圓點添加容器
            ll_point.addView(view, params);
            view.setTag(i);

        }
        //設置第一個爲默認選擇
        View view = ll_point.getChildAt(0);
        view.setEnabled(false);
    }

    //定義handler
    private Handler handler = new Handler();

    //開啓
    public void startSwitch() {
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                int item = vp.getCurrentItem();
                if (item == vp.getAdapter().getCount() - 1) {
                    item = 0;
                } else {
                    item++;
                }
                vp.setCurrentItem(item);
                handler.postDelayed(this, 2000);
            }
        }, 2000);
    }

    //停止
    public void stopSwitch() {
        handler.removeCallbacksAndMessages(null);
    }

    //創建適配器
    private class MyAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            return images.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            ImageView imageView = images.get(position);
            container.addView(imageView);
            return imageView;
        }

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

    @Override
    protected void onResume() {
        super.onResume();
        startSwitch();
    }

    @Override
    protected void onPause() {
        super.onPause();
        stopSwitch();
    }
}


另一種

@Override
public void onPageSelected(int position) {
    for (int i = 0;i<images.size();i++){
        View view = ll.getChildAt(i);
        view.setEnabled(i == position%images.size()?false:true);
    }
}
private class MyAdapter extends PagerAdapter {

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }
@Override
public Object instantiateItem(ViewGroup container, int position) {
    ImageView imageView = images.get(position%images.size());
    container.addView(imageView);
    return imageView;
}
public void startSwitch(){
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            int currentItem = vp.getCurrentItem();
            currentItem++;
            vp.setCurrentItem(currentItem);
            handler.postDelayed(this,2000);
        }
    },2000);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章