gpt4 book ai didi

java - OnTouch MotionEvent Action 移动未触发

转载 作者:太空狗 更新时间:2023-10-29 16:34:21 25 4
gpt4 key购买 nike

我试图在拖动按钮时获取 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 而不是 OnTouchListener 中捕获 X 和 Y 坐标数据。在您围绕屏幕拖动对象的整个过程中,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com