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 )

 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!

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

  1. Activity.dispatchTouchEvent ()
  2. ViewGroup.dispatchTouchEvent ()
  3. View.dispatchTouchEvent ()
  4. View.onTouchEvent ()
  5. ViewGroup.onTouchEvent ()
  6. 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); } 
  • Dibujar un rectángulo detrás de ImageView personalizado que no anima
  • Cómo obtener el índice de una vista particular (personalizada) de ViewGroup (FrameLayout) después de hacer onLongClick en la vista
  • No se puede emitir a la clase ViewPager personalizada
  • Cómo crear un pulldown personalizado en el Honeycomb ActionBar?
  • Android Deslizante Vista
  • Cómo obtener el contexto MainActivity en la clase CustomView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.