Убедитесь, что вы не вызываете 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);
}
}
}
Это то, что у меня сейчас есть.
Если вы знаете, как добавить слушателей или какие-либо предложения, пожалуйста, оставьте комментарий!
ОБНОВИТЬ:
Я только что понял, что при двойном нажатии на оставшееся белое пространство строки уже восстанавливаю строку в исходное состояние. Хотя ни одного крана :(