2016/11/20

Android DragListView 或 SortListView 拖曳排序

在 Android 中要實現 ListView 項目的拖曳排序,

可以參考這篇網路文章: 點選此處,

其實現效果, 如下 :


但是這樣, 雖可以執行, 卻還不是我要的, 原因如下 :

1) 拖曳時, 拖曳物件呈現半透明 ?

2) 拖曳時, 拖曳物件變成藍色 ?

3) 拖曳時, 只有拖拉圖示可以上下拉動 ?

4) 拖曳時, 原 ListItem 還顯示著 ?


所以, 透過修改一些程式碼, 更符合我實際的需求,

1) 在 DragListView.java 中, 搜尋【void onDrag】, 將 windowParams.alpha 透過變數設定, 而非固定 0.5f,

2) 在 DragListView.java 中, 搜尋【Color.BLUE】, 將它用變數替換,

3) 在 DragListView.java 中, 搜尋【View dragger】, 設定 ListItem 只限圖示可拖曳, 還是整個 ListItem 可拖曳,

4) 在 DragListAdapter.java 中, 搜尋【void update】, 將 down 參數紀錄到某個變數(如:dragToNewPosition)中, 然後在 getView method 中, 判斷 position = dragToNewPosition, 則 view invisible(隱藏), 否則 view visible(顯示)

範例主程式, 其部分程式碼, 如下 :
 程式碼
// 從程式中新增 DragListView
DragListView vDragListView = new DragListView( this );

// 或從 XML 中取得 DragListView
DragListView vDragListView = (DragListView)findViewById(R.id.dragListView);

// New method: 拖曳時的項目透明度 (0: 完全透明 ~ 1: 完全不透明)
vDragListView.setDragAlpha( 1f );

// New method: 拖曳時的項目顏色 (0 為原色)
vDragListView.setDragColor( 0 );

// New method: 要進行拖曳, 是否整個項目任何地方都可以拖曳
vDragListView.setDragOnItemAnywhere( true );

vDragListView.setAdapter( vDragListAdapter );

範例結果, 如下 :


以上, 參考看看囉 ^ ^