java - OnTouch MotionEvent Action 移动未触发

标签 java android android-activity touch draggable

我试图在拖动按钮时获取 X、Y 坐标,但由于某种原因,触摸监听器上附加的下面的代码仅触发两次,而不是在拖动时不断更新,即使有 trothing 我也会感到满意为了提高性能,但正如我所说,onTouch 方法仅在操作按下时触发,并且稍后再触发一次。

这是我的代码:

final Button dragBtn = (Button) findViewById(R.id.MyTestButton);

    dragBtn.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent me) {
        // TODO Auto-generated method stub
        ClipData data = ClipData.newPlainText("", "");
        View.DragShadowBuilder shadow = new View.DragShadowBuilder(dragBtn);
        v.startDrag(data, shadow, null, 0);
        int action = me.getAction();


        if (action==MotionEvent.ACTION_DOWN) {

            Log.i("TEST", "ACTION_DOWN");
            return true;
        }


        if (action==MotionEvent.ACTION_MOVE){
            Log.i("TEST", "ACTION_MOVE");

            float x = me.getX();
            float y = me.getY();

            //TODO: Rest of my code here.

            return true;
        }

        if (action==MotionEvent.ACTION_UP){

            Log.i("TEST", "ACTION_UP");
            return true;
        }

        Log.i("TEST", "UKNOWN ACTION");
        return true;
    }
});

在日志中我刚刚:

ACTION_DOWN
WindowManager﹕ Drag already in progress
UKNOWN ACTION

最佳答案

您希望在 OnDragListener 中捕获 X 和 Y 坐标数据,而不是在 OnTouchListener 中。在您在屏幕上拖动对象的整个过程中,Android 会将其解释为单个 ACTION_MOVE 事件,因此您只能从中获取一次数据。将以下代码放入自定义 OnDragListener 类中:

@Override
public boolean onDrag(View v, DragEvent event) {
    int action = event.getAction();
    float xCoord;
    float yCoord;
    if(action == DragEvent.ACTION_DRAG_LOCATION) {
        xCoord = event.getX();
        yCoord = event.getY();
    }
    return event.getResult();       //returns true for valid drop or false for invalid drop
}

在自定义 OnDragListener 类的其他位置,您必须对 xCoord 和 yCoord 数据执行某些操作。例如,在我的应用程序中,我的“调试”版本的应用程序上有一个 TextView,其中显示 xCoord 和 yCoord 数据。在 if(action == DragEvent.ACTION_DRAG_LOCATION){... 部分中获取这两个值后,我立即执行 TextView.setText() 方法。

希望这有帮助。

关于java - OnTouch MotionEvent Action 移动未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32667910/

相关文章:

android - 如何以正确的方式将 Activity 添加到 manifest.xml?

android - Twilio 验证 SDK 在 Android 7.0 和 8.0 上不读取短信

android - 为什么我的 onCreateView 方法被调用了两次?

java - Android - 获取从文件资源管理器中选择的.txt文件的真实路径

java - Shell 排序最坏情况时间复杂度

java - Web应用程序无法获取资源

java - 在 Java 中 - 如何将 resultSet 映射到复杂对象?

android - distanceTo 返回的距离是多少?

android - 来自非 Activity 类的 Intent

java - 求两条曲线之间的面积(每条曲线由一组点组成)