RecyclerView ItemTouchHelper Botones al deslizar

Estoy tratando de portar algunas funciones de iOS a Android.

Tengo la intención de crear una tabla donde al deslizar a la izquierda muestra el botón 2: Editar y Eliminar.

He estado jugando con eso y sé que estoy muy cerca. El secreto realmente radica en el método OnChildDraw.

Me gustaría dibujar un Rect que se ajuste al texto Eliminar y luego dibujar el texto Editar junto con su color de fondo respectivo. El espacio en blanco restante al hacer clic debería restaurar la fila a su posición inicial.

Me las arreglé para pintar el fondo mientras el usuario desliza hacia los lados, pero no sé cómo agregar los oyentes y una vez que se desliza hacia un lado, la función de arrastre comienza a comportarse mal.

Estoy trabajando en Xamarin, pero también se aceptan soluciones java puras, ya que puedo portarlas fácilmente a 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);
        }
    }
}

Esto es lo que tengo actualmente.

Si sabes cómo agregar oyentes o alguna sugerencia, ¡deja un comentario!

ACTUALIZAR:

Me acabo de dar cuenta de que al tocar dos veces el espacio restante en blanco de la fila ya restauramos la fila a su estado inicial. Sin embargo, ni un solo toque :(

Respuestas a la pregunta(6)

Su respuesta a la pregunta