Bug 1310081 - 2. Refactor TabsListTouchHelperCallback to support any swipe alpha function. r=sebastian

MozReview-Commit-ID: HqKwdpArcMm

--HG--
extra : rebase_source : 886697556d7db5f954fe0a096829dbe3f240598a
extra : source : 8873a9ba7282bf454fd6cff4bb652ea0319be09b
This commit is contained in:
Tom Klein 2016-09-12 11:01:08 -05:00
parent 36a8b1bc24
commit 0b4134bdc5
3 changed files with 30 additions and 6 deletions

View File

@ -10,6 +10,7 @@ import org.mozilla.gecko.R;
import android.content.Context;
import android.content.res.Resources;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.AttributeSet;
public class TabsGridLayout extends TabsLayout {
@ -33,6 +34,16 @@ public class TabsGridLayout extends TabsLayout {
setItemAnimator(new TabsGridLayoutAnimator());
// TODO Add ItemDecoration.
// A TouchHelper handler for swipe to close.
final TabsTouchHelperCallback callback = new TabsTouchHelperCallback(this) {
@Override
protected float alphaForItemSwipeDx(float dX, int distanceToAlphaMin) {
return 1f - 2f * Math.abs(dX) / distanceToAlphaMin;
}
};
final ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
touchHelper.attachToRecyclerView(this);
}
@Override

View File

@ -32,7 +32,13 @@ public class TabsListLayout extends TabsLayout {
setLayoutManager(new LinearLayoutManager(context));
// A TouchHelper handler for swipe to close.
final TabsTouchHelperCallback callback = new TabsTouchHelperCallback(this);
final TabsTouchHelperCallback callback = new TabsTouchHelperCallback(this) {
@Override
protected float alphaForItemSwipeDx(float dX, int distanceToAlphaMin) {
return Math.max(0.1f,
Math.min(1f, 1f - 2f * Math.abs(dX) / distanceToAlphaMin));
}
};
final ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
touchHelper.attachToRecyclerView(this);

View File

@ -10,7 +10,7 @@ import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.View;
class TabsTouchHelperCallback extends ItemTouchHelper.Callback {
abstract class TabsTouchHelperCallback extends ItemTouchHelper.Callback {
private final DismissListener dismissListener;
interface DismissListener {
@ -42,8 +42,16 @@ class TabsTouchHelperCallback extends ItemTouchHelper.Callback {
return false;
}
// Alpha on an itemView being swiped should decrease to a min over a distance equal to the
// width of the item being swiped.
/**
* Returns the alpha an itemView should be set to when swiped by an amount {@code dX}, given
* that alpha should decrease to its min at distance {@code distanceToAlphaMin}.
*/
abstract protected float alphaForItemSwipeDx(float dX, int distanceToAlphaMin);
/**
* Alpha on an itemView being swiped should decrease to a min over a distance equal to the
* width of the item being swiped.
*/
@Override
public void onChildDraw(Canvas c,
RecyclerView recyclerView,
@ -58,8 +66,7 @@ class TabsTouchHelperCallback extends ItemTouchHelper.Callback {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
viewHolder.itemView.setAlpha(Math.max(0.1f,
Math.min(1f, 1f - 2f * Math.abs(dX) / viewHolder.itemView.getWidth())));
viewHolder.itemView.setAlpha(alphaForItemSwipeDx(dX, viewHolder.itemView.getWidth()));
}
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {