android - delete - RecyclerView ItemTouchHelper-Vista personalizada
swipe recyclerview android github (3)
No estoy seguro de si obtuvo una solución o no y tampoco estoy seguro de si ha visto esta biblioteca o no.
He intentado Android-SwipeListView library para uno de mis proyectos y SwipeMenuListView para otro proyecto para requisitos similares.
Ambos funcionan bien en su lugar. Deberías intentarlo y comprobar cómo debería funcionar para tu requerimiento.
Avíseme si necesita más ayuda de mí.
Disfruta Codificando ... :)
Estoy intentando que aparezca una vista (o imagen) personalizada al deslizar hacia la izquierda / derecha.
Estoy cerca de que funcione, sin embargo, tengo problemas con el uso de una imagen personalizada.
El efecto que estoy buscando es similar a esto: RecyclerView ItemTouchHelper deslizar eliminar animación
Mira lo que está sucediendo a continuación. Está deformando la imagen a medida que ocurre el deslizamiento:
A continuación se muestra mi código:
@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);
}
}
¿Cómo puedo mantener la imagen estática mientras sigo dibujando el color de fondo? ¿Es posible incluso usar una vista de Android en lugar de una imagen? Similar a esto: https://github.com/wdullaer/SwipeActionAdapter
Puede preparar su diseño de elemento de vista de reciclador para incluir el símbolo de verificación ImageView
y tal vez otra vista en blanco con solo el color de fondo. También debe mover todo el contenido deslizable en un diseño anidado. Asigna una referencia al contenido que se puede deslizar en el titular de tu vista. A continuación, simplemente llame a setTranslationX
en su contenido onChildDraw
en onChildDraw
, como:
((MyViewHolder) viewHolder).swipeableContent.setTranslationX(dX);
Actualización con código fuente Ejemplo:
Reciclador ver el diseño del elemento:
<?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>
Ver clase del titular:
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
*/
}
}
Subclase 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);
}
}
}
Simplemente cambie el (int)dX
en d.setBounds () a cualquier integer
que desee.
p.ej:
d.setBounds(itemView.getLeft(), itemView.getTop(), 50, itemView.getBottom());