Intereting Posts
Разархивируйте ZIP-файл на SD-карте в приложении Android C #: ModernHttpClient, вы ссылаетесь на портативную версию вашего приложения – вам нужно ссылаться на версию платформы (iOS / Android) Android – Gridview или listview? FindViewById в пользовательском представлении, чтобы найти дочерний вид Импортированный модуль в Android Studio не может найти импортированный класс ASIHTTPRequest эквивалент для Android или любого HTTP-менеджера запросов / обертки? Как нарисовать вид сверху мягкой клавиатуры, например WhatsApp? Android SDK и AVD Manager -Cant создать AVD в правильном месте файла Как я могу получить родительский вид с помощью uiautomator? Не удается найти класс символов в Android Studio Android Ожидание намерения началось с notificaion, не заменит последний Android: настроить меню приложения (например, цвет фона) Координатор не работает Переключить флажок программно Android – Пользовательский диалог – Не удается получить текст из EditText

RecyclerView ItemTouchHelper – пользовательский вид

Я пытаюсь создать пользовательский вид (или изображение) при прокрутке влево / вправо.

Я близок к тому, что он работает, однако у меня возникают проблемы с использованием пользовательского образа.

Эффект, который я собираюсь, схож с этим: RecyclerView ItemTouchHelper swipe удаляет анимацию

Посмотрите, что происходит внизу. Это деформирует изображение, когда происходит салфетка:

Введите описание изображения здесь

Ниже мой код выглядит следующим образом:

@Override public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { View itemView = viewHolder.itemView; Paint p = new Paint(); if (dX > 0) { Drawable d = ContextCompat.getDrawable(getActivity(), R.drawable.test_check); d.setBounds(itemView.getLeft(), itemView.getTop(), (int) dX, itemView.getBottom()); d.draw(c); super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); } super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); } } 

Как сохранить неподвижное изображение, продолжая рисовать цвет фона? Можно ли даже использовать изображение Android вместо изображения? Аналогично этому: https://github.com/wdullaer/SwipeActionAdapter

Solutions Collecting From Web of "RecyclerView ItemTouchHelper – пользовательский вид"

Вы можете подготовить макет представления вида ресайклера, чтобы включить символ проверки ImageView и, возможно, еще одно пустое представление только с цветом фона. Вы также должны перенести все содержимое в swipeable во вложенный макет. Назначьте ссылку на содержимое с возможностью прокрутки в своем держателе. Затем просто вызовите setTranslationX в вашем swipeable содержимом в onChildDraw , например:

 ((MyViewHolder) viewHolder).swipeableContent.setTranslationX(dX); 

Обновление с исходным кодом Пример:

Макет элемента просмотра ресайклеров:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="@dimen/recycler_view_item_height" android:background="@color/transparent"> <!-- background color view --> <View android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/purple" /> <!-- check symbol image view --> <ImageView android:layout_width="match_parent" android:layout_height="@dimen/check_symbol_width" android:contentDescription="@null" android:src="@drawable/check_symbol" /> <!-- swipeable content container --> <LinearLayout android:id="@+id/swipeable_content" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <!-- here goes your swipeable content --> </LinearLayout> </RelativeLayout> 

Просмотреть класс владельца:

 class MyViewHolder extends RecyclerView.ViewHolder { // Swipeable content container. LinearLayout swipeableContent; /* ... here goes other sub-views */ public ExpenseViewHolder(final View itemView) { super(itemView); // bind swipeable content container view swipeableContent = (LinearLayout) itemView.findViewById(R.id.swipeable_content); /* ... bind other sub-views */ } } 

Подкласс ItemTouchHelper.Callback:

 class ItemTouchHelperCallback extends ItemTouchHelper.Callback { @Override public void onChildDraw(final Canvas c, final RecyclerView recyclerView, final RecyclerView.ViewHolder viewHolder, final float dX, final float dY, final int actionState, final boolean isCurrentlyActive) { if (viewHolder instanceof MyViewHolder) { // translate by swipe amount, // the check symbol and the background will stay in place ((MyViewHolder) viewHolder).swipeableContent.setTranslationX(dX); } } } 

Я не уверен, есть ли у вас решение или нет, а также не уверены, видели ли вы эту библиотеку или нет.

Я попробовал библиотеку Android-SwipeListView для одного из моих проектов и SwipeMenuListView для другого проекта с аналогичными требованиями.

Оба отлично работают на их месте. Вы должны попробовать это и проверить, как он должен работать для вашего требования.

Дайте мне знать, если вам нужна дополнительная помощь от меня.

Наслаждайтесь кодированием … 🙂

Просто измените (int)dX в d.setBounds () на любое integer вы хотите.

например:

 d.setBounds(itemView.getLeft(), itemView.getTop(), 50, itemView.getBottom());