mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 08:15:31 +00:00
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:
parent
36a8b1bc24
commit
0b4134bdc5
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user