软件编程
位置:首页>> 软件编程>> Android编程>> Android开发使用Handler的PostDelayed方法实现图片轮播功能

Android开发使用Handler的PostDelayed方法实现图片轮播功能

作者:LovooGod  发布时间:2023-10-20 04:37:42 

标签:Android,Handler,PostDelayed,图片轮播

本文实例讲述了Android开发使用Handler的PostDelayed方法实现图片轮播功能。分享给大家供大家参考,具体如下:

第一步:创建MainActivity类


public class BaseActivity extends ActionBarActivity {
   private List<String> mDatas;
   private ViewPager mViewPager;
   private boolean isRun = false;
   private AutoRunTask mTask;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     mViewPager = new ViewPager(this);
     mViewPager.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, Util
       .getDimen(R.dimen.home_pic_height)));
     mViewPager.setAdapter(new HomePagerAdapter());
     // 设置滑动的初始位置
     mViewPager.setCurrentItem(1000 * mDatas.size());
     mViewPager.setOnTouchListener(this);
     mTask = new AutoRunTask();
     mTask.start();
   }
   @Override
   public boolean onTouch(View v, MotionEvent event) {
     switch (event.getAction()) {
     case MotionEvent.ACTION_DOWN:
       mTask.stop();
       break;
     case MotionEvent.ACTION_UP:
     case MotionEvent.ACTION_CANCEL:
       mTask.start();
       break;
     default:
       break;
     }
     return false; //viewpager必须是false,如果是true是就不能移动
   }
}

第二步:创建无限循环的PagerAdaper


class HomePagerAdapter extends PagerAdapter {
   // 使用此对imageView进行复用
   private LinkedList<ImageView> convertViews = new LinkedList<ImageView>();
   @Override
   public int getCount() {
     // return mPicUrls.size();
     return Integer.MAX_VALUE; // 可以无线滑动
   }
   @Override
   public boolean isViewFromObject(View arg0, Object arg1) {
     return arg0 == arg1;
   }
   @Override
   public void destroyItem(ViewGroup container, int position, Object object) {
     if (object != null && object instanceof ImageView) {
       ImageView imageView = (ImageView) object;
       // 添加到集合里
       convertViews.add(imageView);
       container.removeView(imageView);
     }
     super.destroyItem(container, position, object);
   }
   @Override
   public Object instantiateItem(ViewGroup container, int position) {
     // position 因为无线大,所以
     int index = position % mDatas.size();
     ImageView imageView = null;
     if (convertViews != null && convertViews.size() > 0) {
       // 取出一个imageView
       imageView = convertViews.remove(0);
     } else {
       imageView = new ImageView(Util.getContext());
     }
     String uri = HttpHelper.URL + "image?name=" + mDatas.get(index);
     mBitmapUtils.display(imageView, uri);
     container.addView(imageView);
     return imageView;
   }
}

第三步:使用handler创建轮播类


public class AutoRunTask extends Handler implements Runnable {
 @Override
 public void run() {
   while (isRun) {
     removeCallbacks(this);
     int currentItem = mViewPager.getCurrentItem();
     currentItem++;
     mViewPager.setCurrentItem(currentItem);
     postDelayed(this, 2000);
   }
 }
 public void start() {
   if (!isRun) {
     removeCallbacks(this);
     isRun = true;
     postDelayed(this, 2000);
   }
 }
 public void stop() {
   if (isRun) {
     isRun = false;
     removeCallbacks(this);
   }
 }
}

希望本文所述对大家Android程序设计有所帮助。

来源:http://blog.csdn.net/lovoo/article/details/51168385

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com