我在 HorizontalScrollView 中有一些 ImageView。
我希望能够将 ImageView 拖放到其他地方,但仍保持滚动功能。仅当用户用手指开始垂直运动时才应激活拖动。
目前,我已经在长按时激活拖放,但这不是一个好的解决方案。
举例说明:
最佳答案
我也必须这样做。看完http://techin-android.blogspot.in/2011/11/swipe-event-in-android-scrollview.html我对代码进行了如下调整:
class MyOnTouchListener implements View.OnTouchListener {
static final int MIN_DISTANCE_Y = 40;
private float downY, upY;
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
downY = event.getY();
return true;
}
case MotionEvent.ACTION_MOVE: {
upY = event.getY();
float deltaY = downY - upY;
// swipe vertical?
if (Math.abs(deltaY) > MIN_DISTANCE_Y) {
if (deltaY < 0) {
//Start your drag here if appropriate
return true;
}
if (deltaY > 0) {
//Or start your drag here if appropriate
return true;
}
}
}
}
return false;
}
}
然后在 ImageView
上设置监听器:
imageView.setOnTouchListener(new MyOnTouchListener());
在这个版本的代码中,我只检查垂直方向的移动(我还将最小移动量更改为 40 而不是原始代码中的 100)。如果检测到垂直移动,特定的 ImageView
可以开始拖动或执行您想要的任何其他操作。如果未检测到垂直移动,则 ImageView
的 MyTouchListener
返回 false
,这意味着 ImageView
不消耗触摸事件。这允许父 ScrollView
最终获取触摸事件并使用它(用于滚动检测)。这里的答案有助于理解触摸事件:MotionEvent handling in ScrollView in Android .
关于android - 在 ScrollView 中拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21590450/