流程:
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); } }