gesture-imageview的github地址。
下载后将包com.polites.android放入src中,如图:
直接可以在代码中构建gestureImageView的类实例并使用,在viewPager的adapter中重写:
- @Override
- public Object instantiateItem(ViewGroup container, int position) {
- GestureImageView iv = new GestureImageView(mContext);
- iv.setImageBitmap(your-bitmap-here);
- ((ViewPager) container).addView(iv, 0);
- return iv;
- }
可以说,当这个imageView单独使用时,它的功能是挺完美的。
但当前版本的imageview被外层滑动组件嵌套时会有问题,不能直接嵌套使用,当左右滑动时,会默认应用viewpager的滑动(即使你并不想滑动viewpager,只是想拖动放大了之后的图片而已)。viewPager的应用详见issue#30
找到com.polites.android.GestureImageViewTouchListener,我们要做的,就是判断当前imageview是否是被放大的状态,如果当前imageview被放大了,就禁止父组件消费触摸事件。
新加变量:
- private boolean zoomed;
- public boolean isZoomed(){
- return zoomed;
- }
- public void setZoomed(boolean zoomed){
- this.zoomed = zoomed;
- }
新加一句代码,在每次改变lastScale之后,判断是否恢复到原始或者进行了缩放:
(你可以在文件中搜索lastScale以找到它)
- lastScale = currentScale;
- /**
- * recalculate zoomed after lastScale changed.
- */
- zoomed = !(Math.abs(lastScale - startingScale) < 0.01);
在onTouch方法的开头,补充:
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- if (isZoomed())
- image.getParent().requestDisallowInterceptTouchEvent(true);
修改之后,当且仅当 gesture-imageview被缩小到原始规模时,才可以进行viewpager的换页。
效果图:
PS:之后的其他#issue中也提到了,如果能更好地支持viewpager,比如当图片的边界顶到屏幕边界时变可以切换图片等等就好了。