如何区分捏缩放和点击?

时间:2016-06-17 07:52:26

标签: android android-layout

我有一个自定义布局来进行缩放缩放作为父级和子级布局,其中包含许多具有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;


            }
        });

2 个答案:

答案 0 :(得分:0)

试试这个图书馆 - https://github.com/MikeOrtiz/TouchImageView

它包括平移,缩放,双击

希望它会有所帮助:)

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

}

相关问题