android - 在 ScrollView 中拖放

标签 android drag-and-drop scrollview

我在 Horizo​​ntalScrollView 中有一些 ImageView。

我希望能够将 ImageView 拖放到其他地方,但仍保持滚动功能。仅当用户用手指开始垂直运动时才应激活拖动。

目前,我已经在长按时激活拖放,但这不是一个好的解决方案。

举例说明: Drag and Drop

最佳答案

我也必须这样做。看完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 可以开始拖动或执行您想要的任何其他操作。如果未检测到垂直移动,则 ImageViewMyTouchListener 返回 false,这意味着 ImageView 不消耗触摸事件。这允许父 ScrollView 最终获取触摸事件并使用它(用于滚动检测)。这里的答案有助于理解触摸事件:MotionEvent handling in ScrollView in Android .

关于android - 在 ScrollView 中拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21590450/

相关文章:

android - 是否可以创建引用公共(public)模块的正确目标的 kotlin 多平台项目?

c# - 在 Asp.net 中使用 HTML5 的拖放上传文件

ios - 带有内容框架更新关闭的 SwiftUI ScrollView

javascript - CKEDITOR 4.5.4 小部件拖放乘以小部件实例

Android - 当包含在 ScrollView 中时,在 MPAndroidChart 中拖动没有响应

xcode - 如何在 OSX 应用程序的 NStextView 窗口中启用文本的水平滚动?

java - 将整个 JSON 对象添加到 ArrayList

android - getview 方法未在 android 中的自定义 listview 方法中调用

android - 用 Int[] 填充 ImageAdapter

javascript - 支持 Canvas 上的滚动和拖动操作