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


猜你喜欢
- 在一个完整的项目中,如果每一个控制器的方法都返回不同的结果,那么对项目的维护和扩展都会很麻烦;并且现在主流的开发模式时前后端分离的模式,如果
- 一. 编写.cs文件注:要想编译dll中注释可用,则代码中的注释要用“ /// ” 来进行注释,否则
- 本文实例为大家分享了Java实现单向链表反转的具体代码,供大家参考,具体内容如下1、实现代码public class LinkedListT
- 问题1springboot注册 * 过滤器方法注册 * :在启动类中注册bean@EnableWebMvc@Configurationsta
- 在linux下开发,使用的是C语言。适用于需要定时的软件开发,以系统真实的时间来计算,它送出SIGALRM信号。每隔一秒定时一次c语言定时器
- 跨域配置如下,Springboot 版本为 2.4.1///跨域访问配置@Configurationpublic class CorsCon
- 一、前台服务的简单介绍前台服务是那些被认为用户知道且在系统内存不足的时候不允许系统杀死的服务。前台服务必须给状态栏提供一个通知,它被放到正在
- Spring Cache抽象-使用SpEL表达式概述在Spring Cache注解属性中(比如key,condition和unless),S
- 本文研究的主要是Hibernate hql查询的相关内容,具体如下。HQL介绍Hibernate语言查询(Hibernate Query L
- Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的
- 本文讲述了Android编程之高效开发App的10个建议。分享给大家供大家参考,具体如下:假如要Google Play上做一个最失败的案例,
- Android日期选择控件效果如下:调用的代码:@OnClick(R.id.btn0) public void btn0() { final
- 我们都知道且经常用到 unsigned 关键字,但有没有想过,与此对应的 signed 关键字有啥用?int i = 0;signed in
- PreparedStatement介绍可以通过调用 Connection 对象的 prepareStatement(String sql)
- 一、JAVA简要概述先说一下java之父,詹姆斯·高斯林这是一个爱喝咖啡而又强大的男人。再来看一下JAVA有多火在TIOBE排行榜上JAVA
- 考虑一个场景,轮流打印0-100以内的技术和偶数。通过使用 synchronize 的 wait,notify机制就可以实现,核心思路如下:
- 上篇文章老王买产品 我们从最原始的基本实现方法,到简单(静态)工厂,然后使用工厂方法设计模式进行改造,最后考虑产品会产生变体,我们
- 这篇文章主要介绍了Java向上转型和向下转型实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 同步日志的业务流程处理和日志打印是在同一个线程,日志打印的过程实际上是写文件IO的过程,这个过程是相对耗时的,并且会阻塞主线程的执行,只有日
- @Value注解内使用SPEL自定义函数@Value("#{T(com.cheetah.provider.utils.String