以线性布局拖放滚动

时间:2017-08-22 02:38:55

标签: java android drag-and-drop android-scrollview

我目前正在开发一款应用,允许用户在线性布局中添加相对布局,线性布局或嵌套线性布局,线性布局是滚动视图的子级。仅添加相对布局或线性布局时,滚动似乎工作正常,但是,一旦添加嵌套线性布局,滚动就成了问题。基本上,我希望滚动视图在我的拖动视图位于屏幕顶部/底部的x量内时开始滚动。有什么建议?以下是我的一些帮助代码

    protected class myDragEventListener implements View.OnDragListener {
    // This is the method that the system calls when it dispatches a drag event to the listener.
    public boolean onDrag(View v, DragEvent event) {
        // Defines a variable to store the action type for the incoming event
        final int action = event.getAction();
        Point touchPosition = getTouchPositionFromDragEvent(v, event);
        Log.d("y", String.format("%s", String.format("%s", eventTouchYCoord)));
        //View dragView = (View) event.getLocalState();
        // Handles each of the expected events
        switch(action) {
            case DragEvent.ACTION_DRAG_STARTED:
                return true;
            case DragEvent.ACTION_DRAG_ENTERED:
                return true;
            case DragEvent.ACTION_DRAG_LOCATION:
                Log.d("point", touchPosition.toString());
                if (touchPosition.y > (absoluteBottom + mScrollDistance - 350)){
                    Log.d("bottom", "greater");
                    Log.d("actionbar", String.format("%s", actionBarHeight()));
                    homeScroll.scrollBy(0, 30);
                }
                if (touchPosition.y < (actionBarHeight + 350)){
                    Log.d("top", "greater");
                    homeScroll.scrollBy(0, -30);
                }
                break;

getTouchPositionFromDragEvent方法

public static Point getTouchPositionFromDragEvent(View item, DragEvent event) {
    Rect rItem = new Rect();
    item.getGlobalVisibleRect(rItem);
    return new Point(rItem.left + Math.round(event.getX()), rItem.top + Math.round(event.getY()));
}

onScrollChangedListener方法

    homeScroll.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
        @Override
        public void onScrollChanged() {
            mScrollDistance = homeScroll.getScrollY();
            int[] coords = new int[2];
            homeScroll.getLocationOnScreen(coords);
            absoluteTop = coords[1];
            absoluteBottom = coords[1] + homeScroll.getHeight();
        }
    });

1 个答案:

答案 0 :(得分:0)

在xml文件中实现滚动属性始终是最佳做法。这就是你想要在它旁边滚动。或者在Palette中,您会找到垂直和水平滚动的scrollview选项..只需拖放到您想要放置的位置即可。

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    </ScrollView>