触摸时未注册运动事件 'MotionEvent.ACTION_MOVE'
Motion event 'MotionEvent.ACTION_MOVE' not registered on touch
我正在尝试创建一个可拖动视图并根据从拖动视图到放置目标视图的距离更改放置目标视图的 alpha。为此,我需要一种方法来持续检查拖动视图的当前位置。我试图使用 OnTouchListener
来实现它。
MainActivity's
方法中的代码 onCreate
:
myTextView.setOnTouchListener(new MyTouchListener());
classMyTouchListener
的代码:
class MyTouchListener implements View.OnTouchListener {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Log.i("i", "Touched");
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN: {
ClipData clipData = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(clipData, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
break;
}
case MotionEvent.ACTION_MOVE: {
Log.i("i", "this one is never called");
break;
}
}
return true;
}
}
在我开始拖动我的 textView 后,日志输出 "Touched" 两次,没有其他任何内容。谁能告诉我为什么 case MotionEvent.ACTION_MOVE 从未被调用过?
如果这不是实现我想要做的事情的方法,你能指导我更正确的方法吗?
跟
有关系
view.startDrag(clipData, shadowBuilder, view, 0);
如果您注释掉这一行,那么 ACTION_MOVE 事件将正常运行。在我看来,这种 startDrag 方法以某种方式消除了对原始 view[ 的任何聆听=23=]。拖动时,它会向屏幕上的所有其他可见视图发出一个信号,表明有一个对象正在被拖动,这样其他对象就可以监听拖动事件,除此之外别无其他。
更新:
我实际上刚刚在这里发现了同样的问题,答案也非常相似:
我正在尝试创建一个可拖动视图并根据从拖动视图到放置目标视图的距离更改放置目标视图的 alpha。为此,我需要一种方法来持续检查拖动视图的当前位置。我试图使用 OnTouchListener
来实现它。
MainActivity's
方法中的代码 onCreate
:
myTextView.setOnTouchListener(new MyTouchListener());
classMyTouchListener
的代码:
class MyTouchListener implements View.OnTouchListener {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Log.i("i", "Touched");
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN: {
ClipData clipData = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(clipData, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
break;
}
case MotionEvent.ACTION_MOVE: {
Log.i("i", "this one is never called");
break;
}
}
return true;
}
}
在我开始拖动我的 textView 后,日志输出 "Touched" 两次,没有其他任何内容。谁能告诉我为什么 case MotionEvent.ACTION_MOVE 从未被调用过? 如果这不是实现我想要做的事情的方法,你能指导我更正确的方法吗?
跟
有关系view.startDrag(clipData, shadowBuilder, view, 0);
如果您注释掉这一行,那么 ACTION_MOVE 事件将正常运行。在我看来,这种 startDrag 方法以某种方式消除了对原始 view[ 的任何聆听=23=]。拖动时,它会向屏幕上的所有其他可见视图发出一个信号,表明有一个对象正在被拖动,这样其他对象就可以监听拖动事件,除此之外别无其他。
更新:
我实际上刚刚在这里发现了同样的问题,答案也非常相似: