Android 手势检测实战 打造支持缩放平移的图片预览效果(下)(1),字节跳动Android面试全套真题解析在互联网火了

  • @param dx

  • @param dy

  • @return

*/

private boolean isCanDrag(float dx, float dy)

{

return Math.sqrt((dx * dx) + (dy * dy)) >= mTouchSlop;

}

这样,我们就可以快乐的放大、缩小加移动了~~~

效果图:这次换个男人的图片,我们越狱的主角之一,TBug~

我们的缩放+移动搞定~~

2、双击放大与缩小

=========

谈到双击事件,我们的GestureDetector终于要登场了,这哥们可以捕获双击事件~~

1、GestureDetector的使用


因为GestureDetector设置监听器的话,方法一大串,而我们只需要onDoubleTap这个回调,所以我们准备使用它的一个内部类SimpleOnGestureListener,对接口的其他方法实现了空实现。

不过还有几个问题需要讨论下,才能开始我们的代码:

1、我们双击尺寸如何变化?

我是这样的,根据当前的缩放值,如果是小于2的,我们双击直接到变为原图的2倍;如果是2,4之间的,我们双击直接为原图的4倍;其他状态也就是4倍,双击后还原到最初的尺寸。

如果你觉得这样不合适,可以根据自己的爱好调整。

2、我们双击变化,需要一个动画~~比如我们上例的演示图,图片很大,全屏显示的时候initScale=0.5左后,如果双击后变为2,也就是瞬间大了四倍,没有一个过渡的效果的话,给用户的感觉会特别差。所以,我们准备使用postDelay执行一个Runnable,Runnable中再次根据的当然的缩放值继续执行。

首先我们在构造方法中,完成对GestureDetector的初始化,以及设置onDoubleTap监听

public ZoomImageView(Context context, AttributeSet attrs)

{

super(context, attrs);

mScaleGestureDetector = new ScaleGestureDetector(context, this);

mGestureDetector = new GestureDetector(context,

new SimpleOnGestureListener()

{

@Override

public boolean onDoubleTap(MotionEvent e)

{

if (isAutoScale == true)

return true;

float x = e.getX();

float y = e.getY();

Log.e(“DoubleTap”, getScale() + " , " + initScale);

if (getScale() < SCALE_MID)

{

ZoomImageView.this.postDelayed(

new AutoScaleRunnable(SCALE_MID, x, y), 16);

isAutoScale = true;

} else if (getScale() >= SCALE_MID

&& getScale() < SCALE_MAX)

{

ZoomImageView.this.postDelayed(

new AutoScaleRunnable(SCALE_MAX, x, y), 16);

isAutoScale = true;

} else

{

ZoomImageView.this.postDelayed(

new AutoScaleRunnable(initScale, x, y), 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值