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

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

本文实例讲述了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

标签:Android,Handler,PostDelayed,图片轮播
0
投稿

猜你喜欢

  • SpringBoot接口如何对参数进行校验

    2021-08-30 17:25:00
  • Android RecyclerView上拉加载和下拉刷新

    2023-05-09 14:30:26
  • Java导出Execl疑难点处理的实现

    2021-09-18 12:55:11
  • 详解java Collections.sort的两种用法

    2023-11-28 09:30:31
  • java实现PDF转图片的方法

    2021-05-24 04:29:59
  • Java有哪些操作字符串的类?区别在哪?

    2021-06-02 14:50:54
  • Android studio 3.5.2安装图文教程详解

    2022-06-27 19:15:46
  • C#实现策略模式

    2022-02-09 17:19:01
  • C#实现GridView导出Excel实例代码

    2023-10-29 04:31:09
  • C#开发Windows UWP系列之布局面板RelativePanel

    2023-04-11 12:28:29
  • Java中的动态和静态编译实例详解

    2021-07-30 15:25:10
  • Mybatis 开发注解快速入门

    2021-12-01 16:03:36
  • Android 控件GridView使用案例讲解

    2023-07-14 17:33:28
  • Android SQLite数据库的增 删 查找操作

    2023-02-09 09:47:25
  • 解析如何在android中增加gsensor驱动(MMA7660)

    2023-05-22 22:03:24
  • 解决Intellij IDEA 使用Spring-boot-devTools无效的问题

    2023-09-17 20:49:47
  • IntelliJ IDEA运行SpringBoot项目的详细步骤

    2022-04-29 00:59:08
  • java后台批量下载文件并压缩成zip下载的方法

    2021-07-24 21:13:11
  • 理解Java的序列化与反序列化

    2022-06-03 16:14:54
  • Java环境变量的设置方法(图文教程)

    2023-01-02 17:51:42
  • asp之家 软件编程 m.aspxhome.com