Skip to content

Commit f478954

Browse files
committed
Adds item fading with swipe
1 parent 001dcdc commit f478954

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

app/src/main/java/co/paulburke/android/itemtouchhelperdemo/RecyclerListAdapter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
5050
@Override
5151
public void onBindViewHolder(final ItemViewHolder holder, int position) {
5252
holder.textView.setText(mItems.get(position));
53+
5354
holder.handleView.setOnTouchListener(new View.OnTouchListener() {
5455
@Override
5556
public boolean onTouch(View v, MotionEvent event) {

app/src/main/java/co/paulburke/android/itemtouchhelperdemo/helper/ItemTouchHelperAdapter.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,39 @@
11
package co.paulburke.android.itemtouchhelperdemo.helper;
22

33
import android.support.v7.widget.RecyclerView;
4+
import android.support.v7.widget.helper.ItemTouchHelper;
45

56
/**
6-
* Interface to notify a {@link RecyclerView.Adapter} of moving and dismissal event from a {@link
7-
* android.support.v7.widget.helper.ItemTouchHelper.Callback}.
7+
* Interface to listen for a move or dismissal event from a {@link ItemTouchHelper.Callback}.
88
*
99
* @author Paul Burke (ipaulpro)
1010
*/
1111
public interface ItemTouchHelperAdapter {
1212

1313
/**
1414
* Called when an item has been dragged far enough to trigger a move. This is called every time
15-
* an item is shifted, and not at the end of a "drop" event.
15+
* an item is shifted, and <strong>not</strong> at the end of a "drop" event.<br/>
16+
* <br/>
17+
* Implementations should call {@link RecyclerView.Adapter#notifyItemMoved(int, int)} after
18+
* adjusting the underlying data to reflect this move.
1619
*
1720
* @param fromPosition The start position of the moved item.
18-
* @param toPosition Then end position of the moved item.
21+
* @param toPosition Then resolved position of the moved item.
22+
*
1923
* @see RecyclerView#getAdapterPositionFor(RecyclerView.ViewHolder)
2024
* @see RecyclerView.ViewHolder#getAdapterPosition()
2125
*/
2226
void onItemMove(int fromPosition, int toPosition);
2327

2428

2529
/**
26-
* Called when an item has been dismissed by a swipe.
30+
* Called when an item has been dismissed by a swipe.<br/>
31+
* <br/>
32+
* Implementations should call {@link RecyclerView.Adapter#notifyItemRemoved(int)} after
33+
* adjusting the underlying data to reflect this removal.
2734
*
2835
* @param position The position of the item dismissed.
36+
*
2937
* @see RecyclerView#getAdapterPositionFor(RecyclerView.ViewHolder)
3038
* @see RecyclerView.ViewHolder#getAdapterPosition()
3139
*/

app/src/main/java/co/paulburke/android/itemtouchhelperdemo/helper/SimpleItemTouchHelperCallback.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package co.paulburke.android.itemtouchhelperdemo.helper;
22

3+
import android.graphics.Canvas;
34
import android.support.v7.widget.RecyclerView;
45
import android.support.v7.widget.helper.ItemTouchHelper;
56

67
/**
78
* An implementation of {@link ItemTouchHelper.Callback} that enables basic drag & drop and
89
* swipe-to-dismiss. Drag events are automatically started by an item long-press.<br/>
910
* </br/>
10-
* Expects the <code>RecyclerView.Adapter</code> to react to {@link
11+
* Expects the <code>RecyclerView.Adapter</code> to listen for {@link
1112
* ItemTouchHelperAdapter} callbacks and the <code>RecyclerView.ViewHolder</code> to implement
1213
* {@link ItemTouchHelperViewHolder}.
1314
*
@@ -53,6 +54,17 @@ public void onSwiped(RecyclerView.ViewHolder viewHolder, int i) {
5354
mAdapter.onItemDismiss(viewHolder.getAdapterPosition());
5455
}
5556

57+
@Override
58+
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
59+
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
60+
61+
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
62+
final float itemWidth = (float) viewHolder.itemView.getWidth();
63+
final float alpha = 1.0f - Math.abs(dX) / itemWidth;
64+
viewHolder.itemView.setAlpha(alpha);
65+
}
66+
}
67+
5668
@Override
5769
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
5870
if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
@@ -67,6 +79,8 @@ public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionStat
6779
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
6880
super.clearView(recyclerView, viewHolder);
6981

82+
viewHolder.itemView.setAlpha(1.0f);
83+
7084
ItemTouchHelperViewHolder itemViewHolder = (ItemTouchHelperViewHolder) viewHolder;
7185
itemViewHolder.onItemClear();
7286
}

0 commit comments

Comments
 (0)