gpt4 book ai didi

android - 触摸时未注册运动事件 'MotionEvent.ACTION_MOVE'

转载 作者:行者123 更新时间:2023-11-30 01:04:22 30 4
gpt4 key购买 nike

我正在尝试创建一个可拖动 View ,并根据从拖动 View 到放置目标 View 的距离更改放置目标 View 的 alpha。为此,我需要一种方法来持续检查拖动 View 的当前位置。我试图使用 OnTouchListener 来实现它。

MainActivity 的 方法onCreate 中的代码:

myTextView.setOnTouchListener(new MyTouchListener());

MyTouchListener 的代码:

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”两次,除此之外别无其他。谁能告诉我为什么从未调用过 MotionEvent.ACTION_MOVE 案例?如果这不是实现我想要做的事情的方法,你能指导我采用更正确的方法吗?

最佳答案

有关系

view.startDrag(clipData, shadowBuilder, view, 0);

如果您注释掉这一行,那么 ACTION_MOVE 事件将正常工作。在我看来,这种 startDrag 方法以某种方式消除了对原始 View 的任何监听。拖动时,它会向屏幕上的每个其他可见 View 发出一个信号,表明有一个对象正在被拖动,这样其他对象就可以监听拖动事件,除此之外别无其他。

更新:我实际上刚刚在这里发现了同样的问题,答案也非常相似: onTouch() ACTION_MOVE case is not called while dragging

关于android - 触摸时未注册运动事件 'MotionEvent.ACTION_MOVE',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39033459/

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