【问题标题】:Android, DragListener combined with Single Tap or OnClick/OnTouchAndroid、DragListener 结合 Single Tap 或 OnClick/OnTouch
【发布时间】:2015-12-24 19:57:51
【问题描述】:

我正在努力将 DragListener 与 ImageView 中的 SingeTap 操作结合起来。它们单独工作正常,但是这两者应该如何结合呢?

imageView.setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch(event.getAction()) {
                        case MotionEvent.ACTION_UP:
                            Log.e("SINGLE TAP","?");
                            break;
                        case MotionEvent.ACTION_MOVE:
                            ClipData data = ClipData.newPlainText("TRYING", "");
                            DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                            v.startDrag(data, shadowBuilder, v, 0);
                            break;
                        default: break;
                    }
                    return false;
                }
            });

似乎仍然无法正常工作。如何做到这一点?

【问题讨论】:

    标签: android drag


    【解决方案1】:

    ACTION_UP 将在拖动事件完成后以及点击事件完成后被调用。因此,您应该有一个标志来检测是否发生了拖动事件。这是一个例子

    imageView.setOnTouchListener(new OnTouchListener() {
                private boolean isDrag = false;
    
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch(event.getAction()) {
                        case MotionEvent.ACTION_UP:
                            if (!isDrag) {
                                // action was a single tap
                            }
                            isDrag = false; // reset the flag
                            break;
                        case MotionEvent.ACTION_MOVE:
                            isDrag = true; // set the flag
                            ClipData data = ClipData.newPlainText("TRYING", "");
                            DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                            v.startDrag(data, shadowBuilder, v, 0);
                            break;
                        default: break;
                    }
                    return false;
                }
            });
    

    【讨论】:

    • 嗯,非常感谢!
    • 在假设任何 ACTION_MOVE 事件都是拖拽时要小心。通常在轻敲时,也会由于小的自然动作而触发该动作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多