Android 轮播图 实现 三 :原生viewPager + handler 实现无限轮播。 (有待完善!)

流程:

1。布局文件

 
 
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/base300dp">

  <android.support.v4.view.ViewPager
      android:id="@+id/vp_my_viewPager"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />

  <LinearLayout
      android:id="@+id/ll_my_indicator"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_alignParentBottom="true"
      android:gravity="center_horizontal"
      android:layout_marginBottom="@dimen/base30dp"
      android:orientation="horizontal"></LinearLayout>
</RelativeLayout>

2。主类里编码

public class HomeFragment extends BaseFragment {
 
    @BindView(R.id.vp_my_viewPager)
    ViewPager mViewPager;
    @BindView(R.id.ll_my_indicator)
    LinearLayout mCator;
    private List<Integer> mImgList = new ArrayList<>();
    private static final int BANNER_NEXT = 0;
    private static final int BANNER_STOP = 1;
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case BANNER_NEXT:
                    int i = mViewPager.getCurrentItem() + 1;
                    LogUtils.i("viewPager当前的位置为", "viewPager当前的位置为" + i + "页");
                    mViewPager.setCurrentItem(i);
                    i++;
                    LogUtils.i("viewPager当前的位置为","i的值为"+i);
                    for (int j = 0; j < mImgList.size(); j++) { // 点跟着图片走
                        ((ImageView) mCator.getChildAt(j)).setImageResource(R.drawable.gray_radius);
                    }
                    ((ImageView) mCator.getChildAt(i % mImgList.size())).setImageResource(R.drawable.white_radius);
//                    mHandler.sendEmptyMessageDelayed(BANNER_NEXT, 2000);  //  不需要 否则会快速连续发消息。
                    break;
                case BANNER_STOP:
                    break;
                default:
                    break;
            }

        }
    };

    @Override
    protected View initView() {
        View view = View.inflate(getActivity(), R.layout.fragment_home, null);
        ButterKnife.bind(this, view); // 注意的地方。Fragment中 控件引入,。
        return view;
    }

    @Override
    protected void initData() {
        BannerSet2(); //  轮播图添加数据。
    }

    /**
     * 轮播图加载本地数据。
     */
    private void BannerSet2() {
        mImgList.clear();
        mImgList.add(R.drawable.books_image_1);
        mImgList.add(R.drawable.books_image_2);
        mImgList.add(R.drawable.books_image_3);
        mImgList.add(R.drawable.books_image_4);
        mImgList.add(R.drawable.books_image_5);

        for (int i = 0; i < mImgList.size(); i++) {
            ImageView iv = new ImageView(getActivity());
            iv.setLayoutParams(new LinearLayout.LayoutParams(DensityUtil.dip2px(getActivity(), 10) + 10, DensityUtil.dip2px(getActivity(), 10)));
            iv.setImageResource(R.drawable.white_radius);
            iv.setPadding(20, 0, 0, 0);
            mCator.addView(iv);

        }

        mViewPager.setAdapter(new BannerAdapter(getActivity(), mImgList));
//        mViewPager.setCurrentItem(mImgList.size() * 10000);
        ((ImageView) mCator.getChildAt(0)).setImageResource(R.drawable.gray_radius);
        mHandler.sendEmptyMessageDelayed(BANNER_NEXT, 2000); // 发送空消息。
        mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {
                switch (state) {
                    case ViewPager.SCROLL_STATE_DRAGGING:
                        mHandler.removeCallbacksAndMessages(null);
                        mHandler.sendEmptyMessage(BANNER_STOP);

//                            ((ImageView) mCator.getChildAt(i%mImgList.size())).setImageResource(R.drawable.gray_radius);
                        for (int j = 0; j < mImgList.size(); j++) {
                            ((ImageView) mCator.getChildAt(j)).setImageResource(R.drawable.gray_radius);
                        }
                        ((ImageView) mCator.getChildAt(state % mImgList.size())).setImageResource(R.drawable.white_radius);
                        mHandler.sendEmptyMessageDelayed(BANNER_NEXT, 2000);

                        break;
                    case ViewPager.SCROLL_STATE_IDLE:
                        mHandler.sendEmptyMessageDelayed(BANNER_NEXT,2000);
                    default:
                        break;
                }
            }
        });
    }
}
 
 
public class BannerAdapter extends PagerAdapter {
    private final FragmentActivity mActivity;
    private final List<Integer> mList;

    public BannerAdapter(FragmentActivity activity, List<Integer> mImgList) {
        this.mActivity = activity;
        this.mList = mImgList;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE; //
//        return mList.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {

        return view == object;
    }


    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ImageView mImageView = new ImageView(mActivity);
        mImageView.setImageResource(mList.get(position%mList.size()));
        container.addView(mImageView);

        return mImageView;
    }

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


猜你喜欢

转载自blog.csdn.net/qq_39792615/article/details/80744995