RecyclerView ItemTouchHelper Boutons de Balayage

Je suis en train de le port certains la fonctionnalité d'iOS à Android.

J'ai l'intention de créer une table où sur balayez vers la gauche montre 2 bouton: Modifier et Supprimer.

RecyclerView ItemTouchHelper Boutons de Balayage

J'ai été jouer avec elle et je sais que je suis très proche. Le secret repose sur la méthode OnChildDraw.

Je voudrais Dessiner un Rectangle qui s'adapte le texte à Supprimer puis dessiner le texte à Modifier, en plus, il à leur couleur d'arrière-plan. Le reste des blancs de l'espace lorsque l'utilisateur clique dessus devrait restaurer la rangée à sa position initiale.

J'ai réussi à peindre l'arrière-plan lorsque l'utilisateur est en glissant sur les côtés, mais je ne sais pas comment ajouter les auditeurs et une fois qu'il est glissée sur le côté, le glissement de la fonction commence à faire des siennes.

Je suis en train de travailler sur Xamarin, mais pure java solutions sont également acceptés comme je peux facilement les porter à c#.

    public class SavedPlacesItemTouchHelper : ItemTouchHelper.SimpleCallback
{
private SavedPlacesRecyclerviewAdapter adapter;
private Paint paint = new Paint();
private Context context;
public SavedPlacesItemTouchHelper(Context context, SavedPlacesRecyclerviewAdapter adapter) : base(ItemTouchHelper.ActionStateIdle, ItemTouchHelper.Left)
{
this.context = context;
this.adapter = adapter;
}
public override bool OnMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target)
{
return false;
}
public override void OnSwiped(RecyclerView.ViewHolder viewHolder, int direction)
{
}
public override void OnChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, bool isCurrentlyActive)
{
float translationX = dX;
View itemView = viewHolder.ItemView;
float height = (float)itemView.Bottom - (float)itemView.Top;
if (actionState == ItemTouchHelper.ActionStateSwipe && dX <= 0) //Swiping Left
{
translationX = -Math.Min(-dX, height * 2);
paint.Color = Color.Red;
RectF background = new RectF((float)itemView.Right + translationX, (float)itemView.Top, (float)itemView.Right, (float)itemView.Bottom);
c.DrawRect(background, paint);
//viewHolder.ItemView.TranslationX = translationX;
}
else if (actionState == ItemTouchHelper.ActionStateSwipe && dX > 0) //Swiping Right
{
translationX = Math.Min(dX, height * 2);
paint.Color = Color.Red;
RectF background = new RectF((float)itemView.Right + translationX, (float)itemView.Top, (float)itemView.Right, (float)itemView.Bottom);
c.DrawRect(background, paint);
}
base.OnChildDraw(c, recyclerView, viewHolder, translationX, dY, actionState, isCurrentlyActive);
}
}
}

C'est ce que j'ai actuellement.

Si vous savez comment ajouter des écouteurs ou des suggestions, veuillez laisser un commentaire!

Mise à JOUR:

Je viens de réaliser que sur un double tap sur le blanc de l'espace restant de la ligne déjà restaurer la rangée à son état initial. Pas un seul robinet si 🙁

  • souffrant de la même question.
  • Je vais poster ma solution rapidement à ce problème depuis que j'ai fait c'est un peu différent que d'être acceptées répondre