自己动手(一)──可拖动排序的 ListView(2)

来源:互联网 发布:如何评价英雄联盟知乎 编辑:程序博客网 时间:2024/05/24 05:52

接上篇博客,增加以下功能:

  • 在 dragging 的过程中,如果手指移动到ListView上边缘(下边缘),让ListView自动向下滑动(向上滑动)
  • 实时的 reorder Item view
  • 让 dragging item view有一定的透明度

效果图


图片显示有问题请点击这里

自动滑动

    private void scrollListView(float y) {        //the distance you want to scroll ListView        float dy = 0;        if (y < scrollDownBoundary){            dy = (scrollDownBoundary-y) / 10;        } else if (y > scrollUpBoundary){            dy = (scrollUpBoundary-y) / 10;        }        if (dy == 0){            return;        }        //scroll down        if (dy > 0){            View firstVisibleItemView = getChildAt(0);            setSelectionFromTop(getFirstVisiblePosition(), ((int) (firstVisibleItemView.getTop() + dy)));            return;        }        //scroll up        if (dy < 0){            View lastVisibleItemView = getChildAt(getLastVisiblePosition()-getFirstVisiblePosition()-1);            setSelectionFromTop(getLastVisiblePosition(), ((int) (lastVisibleItemView.getTop() + dy)));            return;        }    }

实时的 reorder Item view

        //reorder ListView        int currPosition = pointToPosition(((int) ev.getX()), ((int) ev.getY()));        if (currPosition == AdapterView.INVALID_POSITION || currPosition == srcPosition){            return;        }        ((CommonDragSortAdapter) getAdapter()).setDragSrcPosition(currPosition);        ((CommonDragSortAdapter) getAdapter()).moveItem(srcPosition, currPosition);        srcPosition = currPosition;

让 dragging item view有一定的透明度

draggingItemViewBitmapPaint = new Paint();draggingItemViewBitmapPaint.setAlpha(0x88);

TODO

  1. 兼容 viewholder 模式
  2. 使reorder item view 有动画效果

完整工程

https://github.com/myronlee/DragSortListView

0 0
原创粉丝点击