android 图片轮播
1.在XML文件中,添加ViewPager控件。
<android.support.v4.view.ViewPager
android:id="@+id/adv_viewPager"
android:layout_width="match_parent"
android:layout_height="180dp" />
2.自定义类继承PagerAdapter
public class MyPagerAdapter extends PagerAdapter {
private static final String TAG = MyPagerAdapter.class.getSimpleName();
private final Context mContext;
private final List<ImageView> images;
public MyPagerAdapter(Context context, @NotNull List<ImageView> images) {
this.images = images;
mContext = context;
}
@Override
public int getCount() {
return images.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
/**
* @param container viewpager
* @param position 当前位置
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
Log.i(TAG, "================instantiateItem: " + position);
ImageView imageView = images.get(position);
ViewParent parent = imageView.getParent();
ViewGroup group = (ViewGroup) parent;
if (group != null) { // 判断imageView的父容器中是否包含该控件,包含的话则移除。否则会报IllegalStateException
group.removeView(imageView);
}
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Log.i(TAG, "================destroyItem: " + position);
}
}
3.MainActivity中,使用handler延时实现图片轮播效果
private ViewPager pager;
private int[] advImages = new int[]{R.mipmap.a, R.mipmap.b, R.mipmap.c, R.mipmap.d, R.mipmap.e};
private List<ImageView> lists;
private int curItem = 0; // 当前页面
boolean isAutoPlay = true;
private MyPagerAdapter myPagerAdapter;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (curItem == 0) {
pager.setCurrentItem(curItem, false); // 从末跳到首页时,不显示翻页动画
} else {
pager.setCurrentItem(curItem);
}
curItem = (curItem + 1) % advImages.length;
handler.sendEmptyMessageDelayed(1, 3000);
break;
}
}
};
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_viewpager, container, false);
pager = (ViewPager) view.findViewById(R.id.adv_viewPager);
lists = new ArrayList<>();
for (int i = 0; i < advImages.length; i++) {
ImageView imageView = new ImageView(getContext());
imageView.setImageResource(advImages[i]);
lists.add(imageView);
}
myPagerAdapter = new MyPagerAdapter(getContext(), lists);
pager.setAdapter(myPagerAdapter);
handler.sendEmptyMessage(1);
return view;
}