Pase Android NestedScrollView desplazamientos horizontales a un padre Ver
Estoy tratando de hacer un sistema de tarjeta deslizable izquierda-derecha (como Tinder), donde la tarjeta tiene un NestedScrollView en él. El objetivo sería que si el usuario deslizado hacia arriba y hacia abajo sólo, el NestedScrollView se desplazaría, pero si el usuario pasó a la izquierda o la derecha, la tarjeta se utiliza ese golpe.
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="4dp" card_view:cardUseCompatPadding="true"> <android.support.v4.widget.NestedScrollView android:id="@+id/nested_scroll_view" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="4dp"> <TextView android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="wrap_content" /> <android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> </android.support.v7.widget.CardView>
(La biblioteca de tarjetas que estoy usando es https://github.com/wenchaojiang/AndroidSwipeableCardStack )
- Vista de notificaciones personalizadas
- Android Deslizante Vista
- SurfaceView personalizado que causa NoSuchMethodException
- Nueve parches en un grupo de vistas personalizado
- Android: cambiar el tamaño de vistas personalizadas. Se cambia el tamaño del padre, pero los cambios de ancho / altura no se transmiten a la vista secundaria
compile 'com.github.wenchaojiang:AndroidSwipeableCardStack:0.1.5'
Cuando pongo un margin_top en el NestedScrollView y toco dentro de ese margen, el CardStack correctamente agarra mi entrada y la tarjeta se mueve hacia la izquierda o derecha, pero el NestedScrollView agarra mi entrada independientemente de la dirección si toco y arrasto en cualquier otro lugar.
¿Qué clase / onTouchEvent debo extender / reemplazar para tener este efecto, o podría haber un enfoque más simple?
¡Gracias!
- Cómo obtener el índice de una vista particular (personalizada) de ViewGroup (FrameLayout) después de hacer onLongClick en la vista
- Creación de una vista en forma de calendario con desplazamiento infinito en Android
- Dibujar un rectángulo detrás de ImageView personalizado que no anima
- Desarrollo de Android: los botones reaccionan lentamente
- Cómo obtener el contexto MainActivity en la clase CustomView
- Agregar un botón al elemento ExpandableListView Group
- Vista personalizada de Android Vuelta de memoria de mapa de bits
- Android: cómo crear una instancia de mi vista personalizada con construtor de atributos
Sí, debes hacerlo implementando en código Java el CardStack.CardEventListener, y ponlo como escucha mCardStack.setListener (yourListener); Está en readme dentro del proyecto. Prueba esto:
Class YourListener extends CardStack.CardEventListener{ //implement card event interface @Override public boolean swipeEnd(int direction, float distance) { //if "return true" the dismiss animation will be triggered //if false, the card will move back to stack //distance is finger swipe distance in dp return (distance>300)? true : false; } @Override public boolean swipeStart(int direction, float distance) { return true; } @Override public boolean swipeContinue(int direction, float distanceX, float distanceY) { return true; } @Override public void discarded(int id, int direction) { //this callback invoked when dismiss animation is finished. } @Override public void topCardTapped() { //this callback invoked when a top card is tapped by user. } }
Hago esto para 2 interfaces para mi app. Utilice un GestureDetector
y en onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY)
compruebe la velocidad horizontal. Después de un determinado umbral pasar o interceptar evento táctil para las vistas. Puede comprobar cómo interceptar o pasar eventos de api Touch.
Esta es una solución general independiente de la cual ViewGroups o Views que usas , funciona. Consume eventos antes de pasarlos a su diseño o vista personalizada.
Los eventos de Touch se propagan como
- Activity.dispatchTouchEvent ()
- ViewGroup.dispatchTouchEvent ()
- View.dispatchTouchEvent ()
- View.onTouchEvent ()
- ViewGroup.onTouchEvent ()
- Activity.onTouchEvent ()
Si utiliza GestureDetector
dentro del método dispatchTouchEvent () de su actividad, podrá consumir o propagar el evento a ViewGroups o Views correctamente.
@Override public boolean dispatchTouchEvent(MotionEvent event) { gestureDetector.onTouchEvent(event); // Be sure to call the superclass implementation return super.dispatchTouchEvent(event); }
- El diálogo datepicker no puede pasar a spinner en el dispositivo Android 7.0
- ¿Cómo Android Studio valida XML para la pantalla de preferencias?