ViewPager+可缩放ImageView的使用
来源:互联网 发布:越南废除汉字 知乎 编辑:程序博客网 时间:2024/06/05 17:36
最近项目遇到一个需求,就是在ViewPager里面放置图片,而且每个图片需要可以缩放的。
这种需求相对来说不是很难了,因为网上绝对有很多类似的开源,大家拿过来就可以用了。我之前也是这么做的,直到我发现开源框架没有提供我需要的那个功能之后,我就放弃了。 之前我是在ViewPager里面使用PhotoView这个开源框架的。但是他没有处理图片缩放与ViewPager的滑动的一个冲突。具体表现就是,当你想缩放图片的时候,可能会导致ViewPager的滑动。
这个问题的解决方式其实也很简单,就是在PhotoView的onTouch里面判断,多点时,就不让滑动即可。可是PhotoView这个框架封装的很好,他的PhotoView这个类甚至都没有重写onTouch方法。我自己重写了一下,然后在里面处理,根本没用。
然后,我在网上搜了很多资源,都没有找到很满意的。然后我看到了http://blog.csdn.net/lmj623565791/article/details/39480503 这个博客。发现他写到很详细,而且代码没有PhotoView这个框架那么多。而且注释很清晰。不过不幸的是,他也没有去解决这个冲突。于是,我在他代码的基础上,加上了这个冲突的解决,于是我的需求搞定了。
然后额外发现一个问题,就是在多点触控的时候,有时候会报
java.lang.IllegalArgumentException: pointerIndex out of range
这个异常,又在网上查资料,然后在http://blog.csdn.net/nnmmbb/article/details/28419779这个博客看到了解决方案,我就按照他的方式,自己写一个ViewPager,并在里面try..catch。然后果然catch到异常了,然后程序就没有崩溃了。
总结:实现了ViewPager+可缩放的ImageView。实现,在缩放时,不产生ViewPager的滑动,在缩放时,程序不崩溃。但是其实还有两个需求没有解决:就是缩放之后的图片,在二次显示的时候,没有还原到初始大小;图片只是在初始大小的基础上进行放大,及放大后的缩小,一开始就缩小还没有实现。
代码和第一个博客地址的代码无差别。就是添加了
int count = event.getPointerCount();if (count > 1) {// 当滑动时,手指超过一个就不允许ViewPager滑动getParent().requestDisallowInterceptTouchEvent(true);}
这几句代码,在触摸移动的末尾添加即可。
=========================================================================
一开始就可以缩小,也找到解决方式了,还是在第一个博客地址的代码上,做一点点修改:
/** * 缩放的范围控制 */float smallScale = initScale/2;if ((scale < SCALE_MAX && scaleFactor > 1.0f)|| (scale > smallScale && scaleFactor < 1.0f)) {/** * 最大值最小值判断 */if (scaleFactor * scale < smallScale) {scaleFactor = smallScale / scale;}if (scaleFactor * scale > SCALE_MAX) {scaleFactor = SCALE_MAX / scale;}/** * 设置缩放比例 */mScaleMatrix.postScale(scaleFactor, scaleFactor,detector.getFocusX(), detector.getFocusY());checkBorderAndCenterWhenScale();setImageMatrix(mScaleMatrix);}
就是添加一个缩小值,即可。代码还是他的代码。
###################
缩放的ImageView在ViewPager滑动中的二次还原实现:
1. 要重写ViewPager的getItemPosition方法,返回return POSITION_NONE;为了销毁屏幕外的View;
@Overridepublic int getItemPosition(Object object) {return POSITION_NONE;}
2.设置ViewPager的滑动监听,在ViewPager的滑动监听OnPageChangeListener的重写方法里面添加如下代码:
<p> @Override public void onPageScrollStateChanged(int state) { if (ViewPager.SCROLL_STATE_IDLE == state ) { adapter.notifyDataSetChanged(); } }</p><p> }</p>
。这样就搞定了ViewPager的缩放ImageView的二次显示时候的,缩放还原。
######################
- ViewPager+可缩放ImageView的使用
- Android viewpager + 可缩放的imageview
- 可缩放的ImageView
- Android 可平移,缩放,旋转的ImageView
- 自定义可缩放图片的ImageView
- Android 可缩放ImageView
- android imageview自定义可缩放
- 可平移缩放旋转的ImageView的实现
- Android:手把手教你打造可缩放移动的ImageView
- Android自定义可缩放的ImageView,长按可弹出菜单
- 使用xml 控制imageview的缩放
- Viewpager中嵌入自定义可缩放view遇到的问题
- Viewpager中嵌入自定义可缩放view遇到的问题
- ViewPager 可左右滑动和缩放的图片浏览
- ImageView的缩放模式
- ImageView的缩放模式
- ImageView的缩放
- ImageView的缩放模式
- jdk+tomcat安装部署说明文档
- 数据结构之一元多项式运算操作5-(加,减,乘,化简)
- storm
- Java学习笔记之数据库(触发器、事物、索引、投影和除、视图、存储过程和函数 )含各种链)___ 一直补充
- C++中的字符串
- ViewPager+可缩放ImageView的使用
- [iOS]给UILabel赋HTML数据。
- 自己整理的java泛型(仅限于自己使用)
- 1102. Invert a Binary Tree (25)
- Node博客hexo搭建
- SRAM与SDRAM的区别
- Linux中的likely()和unlikely()
- "use strict"; ----Javascript 严格模式详解
- mysql参数记录