Botões de toque no furto do deslizador

Estou tentando portar algumas funcionalidades do iOS para o Android.

Eu pretendo criar uma tabela onde deslize para a esquerda mostra 2 botões: Editar e Excluir.

Eu brinco com isso e sei que estou muito perto. O segredo realmente está no método OnChildDraw.

Gostaria de desenhar um Rect que se encaixe no texto Excluir e, em seguida, desenhe o texto Editar com a respectiva cor de fundo. O espaço em branco restante quando clicado deve restaurar a linha para sua posição inicial.

Consegui pintar o plano de fundo enquanto o usuário desliza para os lados, mas não sei como adicionar os ouvintes e, depois que ele é deslocado para o lado, a função de arrastar começa a se comportar mal.

Estou trabalhando no Xamarin, mas soluções java puras também são aceitas, pois posso portá-las facilmente para 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);
        }
    }
}

Isto é o que eu tenho atualmente.

Se você sabe como adicionar ouvintes ou alguma sugestão, por favor deixe um comentário!

ATUALIZAR:

Acabei de perceber que, ao tocar duas vezes no espaço em branco restante da linha, ela já restaura a linha ao seu estado inicial. Nem um único toque :(

questionAnswers(6)

yourAnswerToTheQuestion