Android 如何区分收缩缩放和单击?

Android 如何区分收缩缩放和单击?,android,android-layout,Android,Android Layout,我有一个自定义布局,可以作为父级进行收缩缩放,还有一个子级布局,其中包含许多带有单击事件的imagview。问题是,当第一个手指触摸imageview子对象,第二个手指触摸其他位置时,它不会缩放,但只会执行单击事件中的操作 对于收缩缩放代码,我使用以下代码: 有关单击事件代码: imageView.setOnTouchListener( new View.OnTouchListener() { @Override public b

我有一个自定义布局,可以作为父级进行收缩缩放,还有一个子级布局,其中包含许多带有单击事件的imagview。问题是,当第一个手指触摸imageview子对象,第二个手指触摸其他位置时,它不会缩放,但只会执行单击事件中的操作

对于收缩缩放代码,我使用以下代码:

有关单击事件代码:

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;


            }
        });
试试这个图书馆-

它包括平移、缩放、双击


希望它能有所帮助:)

您需要等待一段时间来检查是否有其他指针记录了任何触摸事件。 这是我用于缩放和缩放的代码,适用于大多数情况

onTouchEvent(MotionEvent event) {
//让所有触摸都通过ScaleStereDetector

    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();
        }
}

我的收缩缩放工作正常问题是,当第一个手指放在imageview时,它只会执行单击事件。即使您尝试收缩缩放。对于收缩缩放操作,需要向下移动和向下移动指针,在向下移动操作中,它将生成单击事件,您不能用一个手指缩放(即向下移动)。我理解这一点。现在,我使用自定义缩放相对布局作为父布局,并使用onTouchListener动态创建多个imageView。我无法正确缩放,就好像第一个手指触摸imageView,第二个手指触摸其他地方一样,这只会对侦听器产生影响。但是,如果第一个手指触摸自定义缩放布局,然后触摸子对象或任何其他位置,则可能会挤压缩放精细动作指针,只有当其他手指触摸屏幕时,才会调用该指针。不错!