溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android 實現(xiàn)圖片選擇拖拽控件

發(fā)布時間:2020-08-01 11:01:00 來源:網(wǎng)絡 閱讀:769 作者:wutongkege 欄目:移動開發(fā)

1.使用RecyclerView

使用RecyclerView可以輕松實現(xiàn)圖片切換時的動畫過程,這點要好于GridView。

2. 拖拽的實現(xiàn)

  • Dragmanager

繼承View.OnDragListener,對拖拽過程中進行操作,

Action_drag_started 獲取到操作的Item

Action_Drag_location 根據(jù)每個停留的位置判斷是否交換item的位置。

Action_Drag_ended 跟新位置

  • DragSortAdapter

抽象類,為recyclerView 增加onItemTouchListener和onScrollListener, 記錄onTouch的item,并在拖拽過程中判斷recyclerview是否可以滾動,從而在拖拽的item快到邊界時滾動recyclerView,使可以與本來在屏幕上不可見的item進行交換位置。

  • ViewHolder

ViewHolder 實現(xiàn)startDrag方法


2.itemDecoration


為recyclerview item增加divider,可以有兩種方式,覆蓋onDraw方法繪制itemDivider,或者覆蓋getItemOffsets方法,使item之間可以分隔開。

3.GridlayoutManager

當recyclerview嵌入到scrollview中時,需要復寫LayoutManager,在這里復寫其中的onMeasure方法,需要計算每個item的高度或者寬度進行疊加,當recyclerview中item很多時,不要采用這種方式,回導致view不能復用,其中在計算item高度時,需要加上每個item的itemOffsets,查看recyclerview的源碼發(fā)現(xiàn),無法直接獲取到item的offsets,最終采用反射的方式獲取到其值:

try {
    Method method = recyclerView.getClass().getDeclaredMethod("getItemDecorInsetsForChild",View.class);
    method.setAccessible(true);
    final Rect insets = (Rect)method.invoke(recyclerView, child);
    itemDecorationHeight = heightUsed + insets.height();
    itemDecorationWidth = widthUsed + insets.width();
} catch (NoSuchMethodException e){
    Log.d("FullGridLayoutManager","no method found");
}catch(IllegalAccessException e){
    Log.d("FullGridLayoutManager","IllegalAccessException");
}catch (InvocationTargetException e){
    Log.d("FullGridLayoutManager","InvocationTargetException");
}



向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI