Я пытаюсь перенести некоторые функции iOS на Android.
Я намерен создать таблицу, в которой при прокрутке влево отображается кнопка 2: Изменить и Удалить.
Я играю с этим, и я знаю, что я очень близко. Секрет действительно лежит на методе OnChildDraw.
Я хотел бы нарисовать прямоугольник, который соответствует тексту "Удалить", затем нарисуйте текст "Редактировать", кроме него, с соответствующим цветом фона. Оставшееся свободное пространство при щелчке должно восстановить строку в исходное положение.
Мне удалось рисовать фон, пока пользователь щелкает по сторонам, но я не знаю, как добавить слушателей, и как только он будет выведен в сторону, функция перетаскивания начинает плохо себя вести.
Я работаю над Xamarin, но также принимаются чистые Java-решения, так как я могу легко переносить их на С#.
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);
}
}
}
Это то, что у меня есть.
Если вы знаете, как добавить слушателей или любые предложения, оставьте комментарий!
UPDATE:
Я просто понял, что при двойном касании на белом оставшемся пространстве строки уже восстанавливается строка в исходное состояние. Хотя ни одного нажатия не было: (