将拖动项目实现到屏幕边缘功能

AnZ*_*AnZ 7 android drag-and-drop android-layout android-viewpager

当项目在屏幕边缘(左侧或右侧)附近拖动时,我需要实现当前标签更改.

拖拽N下降功能和当前选项卡切换没有问题.我只是无法正确处理此事件 - 当拖动项目靠近屏幕边缘时.

你会怎么做?

我尝试了什么:

<FrameLayout
    android:id="@+id/left_toggle_area"
    android:layout_width="30dp"
    android:layout_height="fill_parent"
    android:layout_alignParentStart="true"
    android:layout_alignParentLeft="true">
</FrameLayout>

<FrameLayout
    android:id="@+id/right_toggle_area"
    android:layout_width="30dp"
    android:layout_height="fill_parent"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true">
</FrameLayout>

<GridView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ... />
Run Code Online (Sandbox Code Playgroud)

我们的想法是在切换区域拖动项目时以编程方式更改当前选项卡.

但是该DragEvent.ACTION_DRAG_ENTERED区域的事件从未发生过(我相信如此)GridView整个屏幕占用并且只是与切换区域重叠.

我已经尝试在触发拖动启动事件时将这些区域带到前面.但由于某种原因,这不起作用.

FrameLayout toggleView = (FrameLayout) v;
        toggleView.bringToFront();
        toggleView.requestLayout();
        toggleView.invalidate();
Run Code Online (Sandbox Code Playgroud)

如果有人遇到这样的问题,请分享您的经验.或许还有另一个更好的解决方案.请给我一个提示.

meh*_*djg 3

我认为三个视图(切换区域和 )的父级GridViewRelativeLayout. 首先,将GridView, 替换为其父级的第一个子级。其余布局保持原样。

其次,为了用View.OnDragListener界面捕获drop事件,您需要在.conf文件中将最低SDK版本设置为11 AndroidManifest.xml。之后,您可以将侦听器传递到切换区域:

View.OnDragListener dragListener = new View.OnDragListener() {
    @Override
    public boolean onDrag(View v, DragEvent event) {
    // you can check for event.ACTION_DRAG_ENTERED here 
    return true;
    }
};
FrameLayout leftToggleArea = (FrameLayout) findViewById(R.id.left_toggle_area);
leftToggleArea.setOnDragListener(dragListener);
Run Code Online (Sandbox Code Playgroud)

如果您仍然遇到问题,请发布更多代码。