我有一个自定义布局来进行缩放缩放作为父级和子级布局,其中包含许多具有click事件的imagview。问题是当第一个手指触摸imageview孩子并且第二个触摸其他地方时,它将不会缩放,但它只会执行内部点击事件。
对于捏缩放代码我使用: https://gist.github.com/klarson2/4f737adf7f2577dc0fd09efb85eff3b1
对于点击事件代码:
imageView.setOnTouchListener( new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
// primary finger down
Log.i("Frag", "actionDOWN");
return true;
case MotionEvent.ACTION_POINTER_DOWN:
// non-primary finger down
Log.i("Frag", "pointerDOWN");
return false; //go to zoom
case MotionEvent.ACTION_UP:
// primary finder up
Log.i("Frag", "actionUP");
Intent intent = new Intent(getActivity(), DeviceActivity.class);
startActivity(intent);
return true; // stay at frag
case MotionEvent.ACTION_POINTER_UP:
// non-primary finger up
Log.i("Frag", "pointerUP");
return false;
}
return false;
}
});
答案 0 :(得分:0)
答案 1 :(得分:0)
您需要等待一段时间来检查是否有任何其他指针已注册任何触摸事件。 这是我用于缩放和缩放的代码,适用于大多数情况。
onTouchEvent(MotionEvent event) {
//让所有触摸通过scalegesturedetector
scaleGestureDetector.onTouchEvent(event);
if (event.getAction() == MotionEvent.ACTION_DOWN) {
clickTime = System.nanoTime();
deltaTime = System.nanoTime();
}
if (event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) {
secondPointerDown = true;
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
deltaTime = System.nanoTime();
}
// wait for some time (300 - 600 ms) to check for any other pointer.
if (!secondPointerDown && (deltaTime - clickTime) / 100000.0f > 600) {
//do click event
}
if (event.getActionMasked() == MotionEvent.ACTION_POINTER_UP) {
secondPointerDown = false;
clickTime = System.nanoTime();
deltaTime = System.nanoTime();
}
}