ViewPager的简单优化和实现大图轮播
来源:互联网 发布:广州恒大淘宝球员名单 编辑:程序博客网 时间:2024/06/09 17:51
大图轮播的实现方式就是通过ViewPager实现,然后定时改变ViewPager的setCurrentItem。虽然ViewPager加载几张图片不会导致程序崩溃,但是能优化的地方最好还是优化
代码
public class HomePictureHolder extends BaseHolder<List<String>> { private ViewPager viewPager; private List<String> datas; @Override protected void refreshView(List<String> datas) { this.datas = datas; viewPager.setAdapter(new HomePictureAdapter()); viewPager.setCurrentItem(1000 * datas.size()); viewPager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: auToRunTask.stop(); break; // 事件的取消,即在viewpager按下,不在viewpager松开,会导致不在viewpager松开,viewpager不会自动轮播 case MotionEvent.ACTION_CANCEL: auToRunTask.start(); break; case MotionEvent.ACTION_UP: auToRunTask.start(); break; } return false; } }); auToRunTask = new AuToRunTask(); auToRunTask.start(); } @Override protected View initView() { viewPager = new ViewPager(UiUtils.getContext()); viewPager.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, (int) UiUtils.getResource().getDimension(R.dimen.itme_app_height))); return viewPager; } private boolean flag; private AuToRunTask auToRunTask; public class AuToRunTask implements Runnable { @Override public void run() { if (flag) { UiUtils.cancel(this); // 取消之前 int currentItem = viewPager.getCurrentItem(); viewPager.setCurrentItem(++currentItem); // 延迟执行当前的任务 UiUtils.postDelayed(this,5000); } } /* 开始自动轮播*/ public void start(){ if(!flag){ UiUtils.cancel(this); flag = true; UiUtils.postDelayed(this,5000); } } /* 停止自动轮播*/ public void stop(){ if(flag){ UiUtils.cancel(this); flag = false; } } } class HomePictureAdapter extends PagerAdapter { //把ImagerVIew放到一个公共内存,以复用 LinkedList<ImageView> convertView = new LinkedList<>(); @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { int index = position % datas.size(); ImageView view; if (convertView.size() > 0) { view = convertView.remove(0);//把ImageView从公共内存中取出 } else { view = new ImageView(UiUtils.getContext()); } bitmapUtils.display(view, HttpHelp.SERVER_URL + "image?name=" + datas.get(index)); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { ImageView imageView = (ImageView) object; //viewPager移除View时,把ImagerVIew放到公共内存 convertView.add(imageView); container.removeView(imageView); } }}
0 0
- ViewPager的简单优化和实现大图轮播
- ViewPager实现大图轮播
- ViewPager大图轮播
- viewpager实现简单的轮播效果
- 简单使用viewpager+handler实现图片的轮播
- ViewPager无限轮播,简单实现
- viewpager+fragment最简单的轮播
- 简单的ViewPager无限轮播
- 关于ViewPager的简单无线轮播
- ViewPager实现轮播
- ViewPager实现轮播
- 基于ViewPager的轮播完美实现
- CarouselViewPager实现ViewPager的轮播效果
- 强大的Viewpager轮播实现
- Android ViewPager实现的图片轮播
- Android 无限轮播ViewPager的实现
- 自定义无限轮播ViewPager的实现
- ViewPager轮播小圆点的实现
- 函数的练习题
- RSA算法原理(二)
- CentOS6.5 搭建LNMP
- android 视频开发 集成vitamio 播放rtsp m3u8 视频 有图有demo
- 使用jdbc实现简单的用户登录
- ViewPager的简单优化和实现大图轮播
- RSA算法原理(一)
- vim8.0 ubuntu 安装 && 使用vimplus安装插件
- 关于C++函数调用(返回)传值的思考!
- PHP入门概述
- 中国云计算产业2016年度点评
- Spring的InitializingBean接口
- request.getCookies()得不到设置的cookie,浏览器里却存在
- Linux用init命令关机、重启、切换模式