前言
之前做了一个看图的软件,自定义了一个ImageView,在里面处理了很多滑动的逻辑,最终可以双击放大或缩小,放大之后可以进行拖动。我给这个控件取名叫做ScalableImageView,可以嵌套在ViewPager里面,简单改造一下ViewPager就可以进行使用了。
实现
在这里说一下思路好了,源码写了很多注释,如果大家有需要可以直接去github下载源码进行阅读。
-
实现三个接口:
View.OnTouchListener GestureDetector.OnGestureListener GestureDetector.OnDoubleTapListener
有各种手势的回调,比如
onScroll,onFling,onDoubleTap
方法 获取原始图片的宽高,首先将图片放大到与手机一样宽
双击的时候,将图片放大,然后再onScroll里面进行平移
平移之后,如果手指飞速拖动的话,会回调onFling方法,在里面进行属性动画的设置,让图片继续滑动一段距离。
-
处理ViewPager与ScalableImageView的事件冲突:
如果图片没有被放大,那么不需做多余的处理。
如果图片被放大了,且用户想将图片滑出去,那么让ViewPager拦截事件。如果用户只是普通的拖动图片,那依然不要拦截事件,分发给ScalabaleImageView即可。
在使用的时候,要将scaleType设置为matrix,即
android:scaleType="matrix"