我的 Action_DOWN 和我的 Scrollview 之间的冲突

Conflict between my Action_DOWN and my Scrollview

正如您在此 image 上看到的,我有一个灰色区域,其中有一些图像视图。该区域是水平滚动视图内的 LinearLayout。此外,在每个图像视图上,都有一个 OnTouchListener,它在 ACTION_DOWN.

时开始拖放

如您所知,我尝试滚动时出现问题。事实上,ACTION_DOWN 是 "selected" 所以我不能 scroll .

所以我想了几个解决办法:

但是 none 这些解决方案对我有好处。您知道如何解决我的问题吗?

我的xml代码:

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.1"
    android:background="#5d6164"
    android:id="@+id/horizontalScrollView" >

    <LinearLayout
        android:id="@+id/area2_timetable"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:gravity="center">
    </LinearLayout>

</HorizontalScrollView>

我的 OnTouch 方法:

    View.OnTouchListener myOnTouchListener = new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {

        int action = event.getAction();
        if (action==MotionEvent.ACTION_DOWN)
        {
            SharedPreferences mSharedPrefs = getSharedPreferences("User", Context.MODE_PRIVATE);
            if(mSharedPrefs.getInt("son_active", 0)==1) Son(VariablesManagement.nom_stockage_meal.get(v.getId()));

            ClipData data = ClipData.newPlainText("", "");
            DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
            v.startDrag(data, shadowBuilder, v, 0);
        }
        return false;
    }
};

我认为我的 java 代码没有用,所以我没有放它(为了有一个明确的问题)但如果您认为它有帮助,请不要犹豫。

非常感谢!

您需要区分垂直和水平滑动。

尝试如下:

private float y1, y2;

//Adjust this threshold as your need
private static final int MIN_DISTANCE = 20; 

View.OnTouchListener myOnTouchListener = new View.OnTouchListener() {

    public boolean onTouch(final View v, MotionEvent event) {

        switch (event.getAction()) {

            case MotionEvent.ACTION_DOWN:

                y1 = event.getY();

                break;

            case MotionEvent.ACTION_MOVE:

                y2 = event.getY();

                float deltaY = y2 - y1;

                if (Math.abs(deltaY) > MIN_DISTANCE) {

                    ClipData data = ClipData.newPlainText("", "");
                    View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                    v.startDrag(data, shadowBuilder, v, 0);

                    Toast.makeText(getActivity(), "Swiping vertically!", Toast.LENGTH_SHORT).show();

                } else {

                    // Nothing to do
                }

                break;
        }

        return false;
    }
};