您好,登錄后才能下訂單哦!
1.使用RecyclerView
使用RecyclerView可以輕松實現圖片切換時的動畫過程,這點要好于GridView。
2. 拖拽的實現
Dragmanager
繼承View.OnDragListener,對拖拽過程中進行操作,
Action_drag_started 獲取到操作的Item
Action_Drag_location 根據每個停留的位置判斷是否交換item的位置。
Action_Drag_ended 跟新位置
DragSortAdapter
抽象類,為recyclerView 增加onItemTouchListener和onScrollListener, 記錄onTouch的item,并在拖拽過程中判斷recyclerview是否可以滾動,從而在拖拽的item快到邊界時滾動recyclerView,使可以與本來在屏幕上不可見的item進行交換位置。
ViewHolder
ViewHolder 實現startDrag方法
2.itemDecoration
為recyclerview item增加divider,可以有兩種方式,覆蓋onDraw方法繪制itemDivider,或者覆蓋getItemOffsets方法,使item之間可以分隔開。
3.GridlayoutManager
當recyclerview嵌入到scrollview中時,需要復寫LayoutManager,在這里復寫其中的onMeasure方法,需要計算每個item的高度或者寬度進行疊加,當recyclerview中item很多時,不要采用這種方式,回導致view不能復用,其中在計算item高度時,需要加上每個item的itemOffsets,查看recyclerview的源碼發現,無法直接獲取到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"); }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。