自定义ViewPager,用来解决PhotoView和ViewPager的滑动冲突
2016-03-25 10:05
453 查看
转自:仿微信朋友圈图片查看-glide加载网络图片,photoview 实现缩放
这里实现的效果就和微信朋友圈点击图片后查看大图一样,如果你不清楚是什么效果,可以拿出手机,打开朋友圈,找到一条有很多图片的动态,点击图片进去。最终实现的效果就是这样的,多张图片滑动切换,并可缩放,拖动。
项目用到的第三方空间有:
glide,用来加载网络图片,google在自己应用里有用过这个东西。个人感觉十分好用,引入也简单。大公司出品,质量也有保证。
photoview:一个google工程师的个人项目,5k+的star,应该还算靠谱。其实我是无奈才用这个的,挑了很多个图片缩放的lib,其他和ViewPager都有滑动冲突问题,这个可以完美兼容。
本文开发环境是基于AS,Eclipse的朋友就需要自己调整了。整体构架是ViewPager+Fragment,一个图片一个Fragment显示,用Glide在Fragment里加载图片,图片的显示载体是PhotoView。下面上代码:
自定义ViewPager,用来解决PhotoView和ViewPager的滑动冲突,代码是作者提供的。
复制下面的代码,使用这个自定义的ViewPager即可解决PhotoView和ViewPager的滑动冲突报错的问题
这里实现的效果就和微信朋友圈点击图片后查看大图一样,如果你不清楚是什么效果,可以拿出手机,打开朋友圈,找到一条有很多图片的动态,点击图片进去。最终实现的效果就是这样的,多张图片滑动切换,并可缩放,拖动。
项目用到的第三方空间有:
glide,用来加载网络图片,google在自己应用里有用过这个东西。个人感觉十分好用,引入也简单。大公司出品,质量也有保证。
photoview:一个google工程师的个人项目,5k+的star,应该还算靠谱。其实我是无奈才用这个的,挑了很多个图片缩放的lib,其他和ViewPager都有滑动冲突问题,这个可以完美兼容。
本文开发环境是基于AS,Eclipse的朋友就需要自己调整了。整体构架是ViewPager+Fragment,一个图片一个Fragment显示,用Glide在Fragment里加载图片,图片的显示载体是PhotoView。下面上代码:
自定义ViewPager,用来解决PhotoView和ViewPager的滑动冲突,代码是作者提供的。
复制下面的代码,使用这个自定义的ViewPager即可解决PhotoView和ViewPager的滑动冲突报错的问题
package com.example.csonezp.imagezoomdemo; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; /** * Found at http://stackoverflow.com/questions/7814017/is-it-possible-to-disable-scrolling-on-a-viewpager. * Convenient way to temporarily disable ViewPager navigation while interacting with ImageView. * * Julia Zudikova */ /** * Hacky fix for Issue #4 and * http://code.google.com/p/android/issues/detail?id=18990 * <p/> * ScaleGestureDetector seems to mess up the touch events, which means that * ViewGroups which make use of onInterceptTouchEvent throw a lot of * IllegalArgumentException: pointerIndex out of range. * <p/> * There's not much I can do in my code for now, but we can mask the result by * just catching the problem and ignoring it. * * @author Chris Banes */ public class HackyViewPager extends ViewPager { private boolean isLocked; public HackyViewPager(Context context) { super(context); isLocked = false; } public HackyViewPager(Context context, AttributeSet attrs) { super(context, attrs); isLocked = false; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (!isLocked) { try { return super.onInterceptTouchEvent(ev); } catch (IllegalArgumentException e) { e.printStackTrace(); return false; } } return false; } @Override public boolean onTouchEvent(MotionEvent event) { return !isLocked && super.onTouchEvent(event); } public void toggleLock() { isLocked = !isLocked; } public void setLocked(boolean isLocked) { this.isLocked = isLocked; } public boolean isLocked() { return isLocked; } }
相关文章推荐
- Spring mvc 拦截器 配置详解
- php截取字符串函数
- PHP+MYSQL网站SQL Injection攻防
- Linux下面新增硬盘
- android4.4增加ethernet
- mysql企业常用架构和调优
- D3D投影变换
- SSD vs HDD
- Spring MVC 教程,快速入门,深入分析
- UPDATE与多表关联更新
- 【追究进步】二叉树的镜像
- AutoLayout全解
- EventBus使用详解
- C++ list模板类介绍
- Clean My Mac 3 破解版
- Chrome调试大全
- 利用extundelete恢复rm 的文件
- Linux设备驱动之内存映射
- Android Fragment实现按钮间的切换
- jdk tar.gz安装