高效的图片轮播
来源:互联网 发布:python sort函数 编辑:程序博客网 时间:2024/06/05 10:39
最近在做写知乎日报,用到图片轮播,看到比较普遍的方法是把getcount设得很大。这种方法明显是不够高效的。后来看到前辈@Krelve的一篇博客,大赞。这里做详细讲解下。
原理就是,在最后一张图片的后面,加多一张和第一张一样的图片。当轮播到最后一张时(也就是和第一张一样的图片),在OnPageChangeListener的onPageScrollStateChanged方法中将图片无动画地设为第一张。
1、初始化数据,i==0和i==5设置同一张图片
private void initData() {
viewList = new ArrayList();
for (int i = 0; i <= 4 + 1; i++) {
View item = LayoutInflater.from(this).inflate(R.layout.item, null);
ImageView imageView = (ImageView) item.findViewById(R.id.image_view);
if (i == 0) { imageView.setImageResource(R.drawable.item1); } else if (i == 5) { //本身5张图,在第六张图的位置,再添加第一张图 imageView.setImageResource(R.drawable.item1); } else if (i == 1) { imageView.setImageResource(R.drawable.item2); } else if (i == 2) { imageView.setImageResource(R.drawable.item3); } else if (i == 3) { imageView.setImageResource(R.drawable.item4); } else if (i == 4) { imageView.setImageResource(R.drawable.item5); } viewList.add(item); } MyAdapter myAdapter = new MyAdapter(viewList); mViewPager.setAdapter(myAdapter); mViewPager.setCurrentItem(0); mViewPager.addOnPageChangeListener(new MyOnPageChangeListener()); current_item = 0;}
2、viewpager滑动监听,onPageScrollStateChanged的arg0参数:arg0 ==1–默示正在滑动,arg0==2–默示滑动完毕了,arg0==0–默示什么都没做。判断i==5时,将它无动画地切换到i==0
class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {
/** * arg0这个参数有三种状态(0,1,2)。arg0 ==1--默示正在滑动,arg0==2--默示滑动完毕了,arg0==0--默示什么都没做。 * * @param arg0 */ @Override public void onPageScrollStateChanged(int arg0) { switch (arg0) { case 1: isAutoPlay = false; break; case 2: isAutoPlay = true; break; case 0: if (mViewPager.getCurrentItem() == 4 + 1) { /** * false表示无动画效果调到指定页。 * 由于最后一页和第一页的图片是一样的,无动画跳转给人的感觉就是已经是第一页 */ mViewPager.setCurrentItem(0, false); } current_item = mViewPager.getCurrentItem(); isAutoPlay = true; break; } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { }}
3、通过handler.postDelayed(task, 1500);方法实现定时切换
private void startPlay() {
isAutoPlay = true;
handler.postDelayed(task, 1500);
}
private Runnable task = new Runnable() { @Override public void run() { current_item = current_item % 6 + 1; if (isAutoPlay) { if (current_item == 0) { mViewPager.setCurrentItem(current_item, false); handler.postDelayed(task, 1500); } else { mViewPager.setCurrentItem(current_item); handler.postDelayed(task, 1500); } } else { handler.postDelayed(task, 1500); } }};
源码地址:http://download.csdn.net/detail/qq_24334367/9616116
- 高效的图片轮播
- 高效图片轮播,两个ImageView实现
- 高效图片轮播,两个imageView实现
- 图片的轮播
- 图片的轮播
- 简单的图片轮播
- 优化的图片轮播
- ViewPager的图片轮播
- 图片的无限轮播
- axure的图片轮播
- 简单的图片轮播
- 图片的无限轮播
- 轮播图片的展示
- 图片轮播的实现
- 轮播图片的实现
- 轮播图片的展示
- 图片轮播,一个简单的图片轮播
- 图片轮播的js代码
- C++ 虚函数、纯虚函数 VS JAVA抽象函数
- delete和delete[]的区别
- 上班日记
- Java不定长参数
- VMware Vsphere 6.0安装部署 (三) vCenter Server安装
- 高效的图片轮播
- 工作流Activiti的学习总结(九)Activiti手工执行的应用(ReceiveTask实现方式)
- codeforces 624d 623b Array GCD ★ ★
- Service一基础
- hdu5752 2016 Multi-University Training Contest 3 Sqrt Bo 解题报告
- 线程同步
- PHP设计模式--单例模式
- 二叉搜索树
- 字符编码ASCII, Unicode和UTF-8概念扫盲