19
19
import android .graphics .Canvas ;
20
20
import android .support .v7 .widget .RecyclerView ;
21
21
import android .support .v7 .widget .helper .ItemTouchHelper ;
22
+ import android .view .View ;
22
23
23
24
/**
24
25
* An implementation of {@link ItemTouchHelper.Callback} that enables basic drag & drop and
32
33
*/
33
34
public class SimpleItemTouchHelperCallback extends ItemTouchHelper .Callback {
34
35
36
+ public static final float ALPHA_FULL = 1.0f ;
37
+
35
38
private final ItemTouchHelperAdapter mAdapter ;
36
39
37
40
public SimpleItemTouchHelperCallback (ItemTouchHelperAdapter adapter ) {
@@ -50,6 +53,7 @@ public boolean isItemViewSwipeEnabled() {
50
53
51
54
@ Override
52
55
public int getMovementFlags (RecyclerView recyclerView , RecyclerView .ViewHolder viewHolder ) {
56
+ // Enable drag and swipe in both directions
53
57
final int dragFlags = ItemTouchHelper .UP | ItemTouchHelper .DOWN ;
54
58
final int swipeFlags = ItemTouchHelper .START | ItemTouchHelper .END ;
55
59
return makeMovementFlags (dragFlags , swipeFlags );
@@ -61,29 +65,33 @@ public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source,
61
65
return false ;
62
66
}
63
67
68
+ // Notify the adapter of the move
64
69
mAdapter .onItemMove (source .getAdapterPosition (), target .getAdapterPosition ());
65
70
return true ;
66
71
}
67
72
68
73
@ Override
69
74
public void onSwiped (RecyclerView .ViewHolder viewHolder , int i ) {
75
+ // Notify the adapter of the dismissal
70
76
mAdapter .onItemDismiss (viewHolder .getAdapterPosition ());
71
77
}
72
78
73
79
@ Override
74
80
public void onChildDraw (Canvas c , RecyclerView recyclerView , RecyclerView .ViewHolder viewHolder , float dX , float dY , int actionState , boolean isCurrentlyActive ) {
75
81
super .onChildDraw (c , recyclerView , viewHolder , dX , dY , actionState , isCurrentlyActive );
76
82
83
+ // Fade out the view as it is swiped out of the parent's bounds
77
84
if (actionState == ItemTouchHelper .ACTION_STATE_SWIPE ) {
78
- final float itemWidth = ( float ) viewHolder .itemView . getWidth () ;
79
- final float alpha = 1.0f - Math .abs (dX ) / itemWidth ;
80
- viewHolder . itemView .setAlpha (alpha );
85
+ View itemView = viewHolder .itemView ;
86
+ final float alpha = ALPHA_FULL - Math .abs (dX ) / ( float ) itemView . getWidth () ;
87
+ itemView .setAlpha (alpha );
81
88
}
82
89
}
83
90
84
91
@ Override
85
92
public void onSelectedChanged (RecyclerView .ViewHolder viewHolder , int actionState ) {
86
93
if (actionState != ItemTouchHelper .ACTION_STATE_IDLE ) {
94
+ // Let the view holder know that this item is being moved or dragged
87
95
ItemTouchHelperViewHolder itemViewHolder = (ItemTouchHelperViewHolder ) viewHolder ;
88
96
itemViewHolder .onItemSelected ();
89
97
}
@@ -95,8 +103,9 @@ public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionStat
95
103
public void clearView (RecyclerView recyclerView , RecyclerView .ViewHolder viewHolder ) {
96
104
super .clearView (recyclerView , viewHolder );
97
105
98
- viewHolder .itemView .setAlpha (1.0f );
106
+ viewHolder .itemView .setAlpha (ALPHA_FULL );
99
107
108
+ // Tell the view holder it's time to restore the idle state
100
109
ItemTouchHelperViewHolder itemViewHolder = (ItemTouchHelperViewHolder ) viewHolder ;
101
110
itemViewHolder .onItemClear ();
102
111
}
0 commit comments