Убедитесь, что вы не вызываете super.onChildDraw () по умолчанию

аюсь перенести некоторые функции iOS на Android.

Я намерен создать таблицу, где при пролистывании влево отображается 2 кнопки: «Редактировать» и «Удалить».

Я играл с этим, и я знаю, что я очень близок. Секрет действительно кроется в методе OnChildDraw.

Я хотел бы нарисовать Rect, который соответствует тексту Delete, а затем нарисовать текст Edit вместе с соответствующим цветом фона. Оставшийся пробел при нажатии должен восстановить строку в ее первоначальное положение.

Мне удалось нарисовать фон, когда пользователь проводит пальцем по сторонам, но я не знаю, как добавить слушателей, и как только он перемещается в сторону, функция перетаскивания начинает работать неправильно.

Я работаю над Xamarin, но также принимаются чистые Java-решения, так как я могу легко перенести их на 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);
        }
    }
}

Это то, что у меня сейчас есть.

Если вы знаете, как добавить слушателей или какие-либо предложения, пожалуйста, оставьте комментарий!

ОБНОВИТЬ:

Я только что понял, что при двойном нажатии на оставшееся белое пространство строки уже восстанавливаю строку в исходное состояние. Хотя ни одного крана :(

Ответы на вопрос(1)

Ваш ответ на вопрос