android 轮播图无限循环,自动播放
2015-09-08 16:17
621 查看
在Fragment中添加Handler:
private static class BannerHandler extends Handler {
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_SWITCH_PIC) {
if (vpBanner != null) {
if (switchPictureAdapter != null) {
vpBanner.setCurrentItem(vpBanner.getCurrentItem() + 1);
this.sendEmptyMessageDelayed(MSG_SWITCH_PIC,
BANNER_TIME_PEROID);
}
}
}
}
}
初始化:
轮播图的适配器:
手指移动不播放
/**
* 手滑动banner时不自动播放
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.vp_banner) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
bannerHandler.removeMessages(MSG_SWITCH_PIC);
break;
case MotionEvent.ACTION_MOVE:
bannerHandler.removeMessages(MSG_SWITCH_PIC);
break;
case MotionEvent.ACTION_UP:
bannerHandler.sendEmptyMessageDelayed(MSG_SWITCH_PIC,
BANNER_TIME_PEROID);
break;
case MotionEvent.ACTION_CANCEL:
bannerHandler.sendEmptyMessageDelayed(MSG_SWITCH_PIC,
BANNER_TIME_PEROID);
break;
default:
break;
}
}
return false;
}
private static class BannerHandler extends Handler {
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_SWITCH_PIC) {
if (vpBanner != null) {
if (switchPictureAdapter != null) {
vpBanner.setCurrentItem(vpBanner.getCurrentItem() + 1);
this.sendEmptyMessageDelayed(MSG_SWITCH_PIC,
BANNER_TIME_PEROID);
}
}
}
}
}
初始化:
bannerHandler = new BannerHandler(); bannerHandler.sendEmptyMessageDelayed(MSG_SWITCH_PIC, BANNER_TIME_PEROID); mImgUrls.clear(); mImgUrls.add("https://www.baidu.com/img/bd_logo1.png"); mImgUrls.add("https://www.baidu.com/img/bd_logo1.png"); mImgUrls.add("https://www.baidu.com/img/bd_logo1.png"); switchPictureAdapter = new SwitchPictureAdapter(mActivity, vpBanner, mImgUrls, view); vpBanner.setAdapter(switchPictureAdapter); if (mImgUrls.size() > 1) { vpBanner.setCurrentItem(1); }
轮播图的适配器:
public class SwitchPictureAdapter extends PagerAdapter { private Context mContext; private List<ImageView> mImageViews; private List<String> mImgUrls; private LinearLayout mPoints; private ViewPager mViewPage; public SwitchPictureAdapter(Context mContext, ViewPager page, List<String> mImgUrls, View view) { super(); this.mContext = mContext; this.mImgUrls = mImgUrls; this.mImageViews = new ArrayList<ImageView>(); this.mViewPage = page; this.mPoints = (LinearLayout) view.findViewById(R.id.ll_point); mPoints.removeAllViews(); initData(); initViews(); this.mViewPage.setOnPageChangeListener(new PagerListener()); } private void initData() { // 实现无限循环,另外添加两张图片 mImgUrls.add(0, mImgUrls.get(mImgUrls.size() - 1)); // 第一个位置添加最后一张 mImgUrls.add(mImgUrls.get(1));// 最后一个位置添加第0张 // 添加点 for (int i = 0; i < mImgUrls.size() - 2; i++) { ImageView point = new ImageView(mContext); int dp = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 8, mContext.getResources() .getDisplayMetrics()); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( dp, dp); int margin = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 4, mContext.getResources() .getDisplayMetrics()); params.setMargins(margin, 0, margin, 0); point.setLayoutParams(params); if (i == 0) { point.setBackgroundResource(R.drawable.point_red); } else { point.setBackgroundResource(R.drawable.point_normal); } mPoints.addView(point); } } private void initViews() { if (mImgUrls != null) { for (int i = 0; i < mImgUrls.size(); i++) { ImageView view = new ImageView(mContext); view.setLayoutParams(new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); ImageLoadUtil.loadImage(mImgUrls.get(i), view); mImageViews.add(view); if (mImgUrls.size() <= 3) {// 说明只有一张图片 break; } } } } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView view = mImageViews.get(position); ViewGroup parent = (ViewGroup) view.getParent(); if (parent != null) { parent.removeAllViews(); } container.addView(view); return view; } @Override public int getCount() { if (mImgUrls == null) { return 0; } if (mImgUrls.size() <= 3) { return 1; } return mImgUrls.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((ImageView) object); } private class PagerListener implements OnPageChangeListener { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int pos) { if (mImageViews.size() > 1) { // 图片多余一张才轮播 if (pos < 1) { pos = mImageViews.size() - 2; mViewPage.setCurrentItem(pos, false); } else if (pos > mImageViews.size() - 2) { mViewPage.setCurrentItem(1, false); pos = 1; } for (int i = 0; i < mPoints.getChildCount(); i++) { if (pos == i + 1) { mPoints.getChildAt(i).setBackgroundResource( R.drawable.point_red); } else { mPoints.getChildAt(i).setBackgroundResource( R.drawable.point_normal); } } } } } }
手指移动不播放
/**
* 手滑动banner时不自动播放
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.vp_banner) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
bannerHandler.removeMessages(MSG_SWITCH_PIC);
break;
case MotionEvent.ACTION_MOVE:
bannerHandler.removeMessages(MSG_SWITCH_PIC);
break;
case MotionEvent.ACTION_UP:
bannerHandler.sendEmptyMessageDelayed(MSG_SWITCH_PIC,
BANNER_TIME_PEROID);
break;
case MotionEvent.ACTION_CANCEL:
bannerHandler.sendEmptyMessageDelayed(MSG_SWITCH_PIC,
BANNER_TIME_PEROID);
break;
default:
break;
}
}
return false;
}
相关文章推荐
- android四大组件之--->BroadcastReceiver广播接收器
- Android 自定义拍照,解决图片旋转,拍照参数设置兼容问题
- Android 性能检测
- android5.0自定义seekbar指示器有白色的解决方案
- Android Hotpatch系列之-给release包打Patch
- android 之popwindow 小结
- Android 四大组件之一:BroadcastReceiver广播机制
- 新应用的知识整理-Android studio中应用多语言支持及应用内语言切换的实现
- Android开发问题集锦-Button初始为disable状态时自定义的selector不生效问题
- mac 系统开发android,真机调试解决方案总结
- Android中SQLite应用详解
- Android layout 颜色编码
- Android基础入门教程——7.2.1 Android XML数据解析
- 使用Arcgis for Android进行路径分析的总体思路
- android 应用程序安装源码分析
- 针对Android提权代码zergRush的分析
- android Jni编译多平台so库
- 从Android到项目经理再到产品总监
- (五) Android 分享一个SharedPreferences的工具类,方便保存数据
- Android学习笔记一