android - onTouchEvent()中如何区分拖动和点击?

标签 android pinchzoom android-gesture

我有一个自定义布局捏缩放代码作为父布局和一个处理点击功能的子布局。因此我使用了触摸拦截,但问题是它不知道什么时候点击或拖动。

 @Override
    public boolean onInterceptTouchEvent(MotionEvent ev){


    switch (ev.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            startClickTime = System.currentTimeMillis(); //start time when first finger land
            Log.i("Zoom", " actionDown");
            if ( scale > MIN_ZOOM){
                mode = Mode.DRAG;
                startX = ev.getX() - prevDx;
                startY = ev.getY() - prevDy;
            }
            return false; //go to child layout

        case MotionEvent.ACTION_POINTER_DOWN:
            mode = Mode.ZOOM;
            return true;

        case MotionEvent.ACTION_UP:
            long clickDuration = System.currentTimeMillis() - startClickTime;
            mode = Mode.NONE;
            if(clickDuration < MAX_CLICK_DURATION){
                return false;
            }
            else {
                // letting go from drag or zooming
                return true;
            }

        case MotionEvent.ACTION_MOVE:
            clickDuration = System.currentTimeMillis() - startClickTime;
            if (clickDuration > MAX_CLICK_DURATION){
                return true;
            }
            else {
                return false;
            }
    }
    return false;
}

在我的点击功能的子布局中:

switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {

                case MotionEvent.ACTION_DOWN:
                        // primary finger down
                     return true;

                case MotionEvent.ACTION_POINTER_DOWN:
                        // non-primary finger down
                    return false;

                case MotionEvent.ACTION_CANCEL:
                    return false;

                case MotionEvent.ACTION_UP:
                    // primary finder up
                    Intent intent = new Intent(context, DeviceActivity.class);
                    context.startActivity(intent);
                    return true;

                case MotionEvent.ACTION_POINTER_UP:
                    // non-primary finger up
                    return false;
            }

那么有没有办法区分拖动和点击。

最佳答案

点击和拖动事件有四种状态: 开始 -> 继续 -> 放弃 -> 结束

DragEvent 类提供表示它们的整数:

  • ACTION_DRAG_STARTED
  • ACTION_DRAG_ENTERED
  • ACTION_DRAG_LOCATION
  • ACTION_DRAG_EXITED
  • ACTION_DROP
  • ACTION_DRAG_ENDED

永远记住,拖动操作需要屏幕上有一个选定的项目(您正在拾取一些东西并移动)。但是在缩放时你没有选择的项目,而是你得到的是 View 。使用此属性,您可以区分拖动和缩放操作。

关于android - onTouchEvent()中如何区分拖动和点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38262768/

相关文章:

android - Android打开和关闭声音应用

android - android中Edittext中Plain text input type和Person Name input type的区别

android - 捏放大android相机

java - 如何在缩小时将图像返回到原始位置 - Android

android - MotionEvent.getPointerCount() 始终为 1

android - 在运行时更改手势颜色

android - 如何将AppBarLayout的高度设置为0

安卓工作室 "Unable to save plugin settings"

silverlight - Windows Phone 中的照片库

Android - 处理 ListView 项目上的单击和滑动