mra*_*tor 5 multi-touch android-imageview onfling pinchzoom
在我的Android应用程序中,我有一个ImageView地方,我希望用户能够将其向左/向右/向上/向下推动以将图像(静态地图)更改为相邻的图像.但另外,我想要捏缩放功能和地图本身.
我可以投掷或捏缩放工作,但不能在一起.我正在使用GestureDetector(带有SimpleOnGestureListener)用于投掷.我正在使用ScaleGestureDetector(来自Making Sense of Multitouch)进行缩放.
难点在于确定在触摸动作时调用哪个手势监听器.这不是编码问题,而是逻辑问题.单手触摸动作时,它是甩尾还是刻度?即使使用双指缩放,初始MotionEvent也是ACTION_DOWN.我一直在尝试使用图像大小(内在或缩放?)作为决策点.但是使用ACTION_DOWN初始缩放操作(当图像大小是内在的并且我想放大它时)似乎让我感到厌烦.
有没有人以前成功解决过这个问题?
您可以将事件传递给两个手势检测器.
查看"更复杂的缩放示例"下的http://developer.android.com/training/gestures/scale.html:
public boolean onTouchEvent(MotionEvent event) {
boolean retVal = mScaleGestureDetector.onTouchEvent(event);
retVal = mGestureDetector.onTouchEvent(event) || retVal;
return retVal || super.onTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
当然,考虑到Ratatat引用的错误,在上面的示例中永远不会调用super.onTouchEvent,根据您的使用情况,可能会也可能不会.
小智 2
终于在链接上找到了答案: http://code.google.com/p/android/issues/detail ?id=42591
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean result = mScaleGestureDetector.onTouchEvent(event);
// result is always true here, so I need another way to check for a detected scaling gesture
boolean isScaling = result = mScaleGestureDetector.isInProgress();
if (!isScaling) {
// if no scaling is performed check for other gestures (fling, long tab, etc.)
result = mCommonGestureDetector.onTouchEvent(event);
}
// some irrelevant checks...
return result ? result : super.onTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)