Detectar desplazamiento con onTouchListener en ScrollView

Estoy usando el siguiente código para detectar swipe en mi Actividad:

getWindow().getDecorView().getRootView().setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); if(action == MotionEvent.ACTION_DOWN){ downX = event.getX(); downY = event.getY(); //mSwipeDetected = Action.None; return true; // allow other events like Click to be processed } else if(action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL){ upX = event.getX(); upY = event.getY(); float deltaX = downX - upX; float deltaY = downY - upY; // horizontal swipe detection if (Math.abs(deltaX) > MIN_DISTANCE) { // left or right if (deltaX < 0) { Log.i(TAG, "Swipe Left to Right"); //mSwipeDetected = Action.LR; onClickPrevQues(getWindow().getDecorView().getRootView()); return false; } if (deltaX > 0) { Log.i(TAG, "Swipe Right to Left"); onClickNextQues(getWindow().getDecorView().getRootView()); // mSwipeDetected = Action.RL; return false; } } else if (Math.abs(deltaY) > MIN_DISTANCE) { // vertical swipe // detection // top or down if (deltaY < 0) { Log.i(TAG, "Swipe Top to Bottom"); //mSwipeDetected = Action.TB; return false; } if (deltaY > 0) { Log.i(TAG, "Swipe Bottom to Top"); //mSwipeDetected = Action.BT; return false; } } return false; } else if(action == MotionEvent.ACTION_MOVE){ return true; } return false; } }); 

El código funciona bien en caso de LinearLayout . Sorprendentemente, el mismo no está funcionando en caso de que envuelva el Linearlayout dentro de ScrollView . ¿Cuál es el problema aquí?

Editar:
Diseño:

  <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <RelativeLayout android:id="@+id/RelativeLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#ffffff" android:gravity="center_horizontal" > <RelativeLayout android:id="@+id/RelativeLayout2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal" android:paddingBottom="0dp" android:paddingLeft="620dip" android:paddingTop="15dip" > <TextView android:id="@+id/text_unattempted" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:paddingTop="2dp" android:text="TextView" android:textColor="#b4cacc" android:textStyle="bold" /> </RelativeLayout> <LinearLayout android:id="@+id/LinearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/RelativeLayout2" android:gravity="center_horizontal" android:orientation="horizontal" android:paddingBottom="5dip" android:paddingTop="5dip" > <RelativeLayout android:id="@+id/relative_group" android:layout_width="fill_parent" android:layout_height="260dp" android:layout_marginLeft="20dp" android:orientation="vertical" > <TextView android:id="@+id/txt_question_nu" android:layout_width="180dp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:paddingTop="0dp" android:text="Question 1" android:textColor="#b4cacc" android:textSize="28dp" android:textStyle="bold" /> <TextView android:id="@+id/question" android:layout_width="fill_parent" android:layout_height="400dp" android:layout_alignLeft="@+id/txt_question_nu" android:layout_below="@+id/txt_question_nu" android:layout_marginBottom="20dp" android:layout_marginTop="24dp" android:textColor="#000000" android:textSize="20dp" /> <WebView android:id="@+id/questionimage" android:layout_width="wrap_content" android:layout_height="400dp" android:layout_alignLeft="@+id/txt_question_nu" android:layout_alignParentBottom="true" android:layout_below="@+id/txt_question_nu" android:layout_marginTop="24dp" android:fadeScrollbars="false" android:textColor="#000000" android:textSize="20dp" android:textStyle="bold" /> <Button android:id="@+id/hintSolBtn" style="@style/HomeButton" android:layout_width="40dp" android:layout_height="30dp" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/txt_question_nu" android:background="#90b7bb" android:onClick="onClickHintSol" android:scaleType="centerInside" android:text="Hint" android:textColor="#ffffff" /> </RelativeLayout> </LinearLayout> <RelativeLayout android:id="@+id/LinearLayout2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginTop="15dp" android:layout_below="@+id/radio_question_group" android:layout_alignParentLeft="true" android:orientation="horizontal" android:paddingTop="5dip" > <ImageButton android:id="@+id/abandonButton" style="@style/HomeButton" android:layout_width="wrap_content" android:layout_height="50dp" android:layout_alignParentRight="true" android:layout_marginRight="45dp" android:onClick="onAbandonAssess" android:paddingLeft="6dp" android:scaleType="centerInside" android:src="@drawable/abandon" android:visibility="gone" /> <Button android:id="@+id/submitBtn" android:layout_width="150dp" android:layout_height="50dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="63dp" android:background="#00b6c6" android:onClick="onSubmitAssess" android:paddingLeft="6dp" android:scaleType="centerInside" android:text="Submit" android:textColor="#ffffff" android:textSize="22dp" /> <ImageButton android:id="@+id/prevBtn" style="@style/HomeButton" android:layout_width="120dp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_weight="0.01" android:onClick="onClickPrevQues" android:scaleType="centerInside" android:src="@drawable/previous" /> <ImageButton android:id="@+id/nextBtn" style="@style/HomeButton" android:layout_width="120dp" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/prevBtn" android:onClick="onClickNextQues" android:scaleType="centerInside" android:src="@drawable/next" /> </RelativeLayout> <TextView android:id="@+id/answer_choices" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/LinearLayout1" android:layout_marginLeft="37dp" android:text="Answer Choices" android:textColor="#b4cacc" android:textSize="20dp" android:textStyle="bold" /> <RadioGroup android:id="@+id/radio_question_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/answer_choices" android:layout_below="@+id/answer_choices" > <RadioButton android:id="@+id/answer1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:button="@drawable/radiostate" android:checked="false" android:layout_marginTop="10dp" android:hapticFeedbackEnabled="true" android:height="100dp" android:textColor="#000000" /> <RadioButton android:id="@+id/answer2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:button="@drawable/radiostate" android:layout_marginTop="10dp" android:checked="false" android:hapticFeedbackEnabled="true" android:textColor="#000000" /> <RadioButton android:id="@+id/answer3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:button="@drawable/radiostate" android:layout_marginTop="10dp" android:checked="false" android:hapticFeedbackEnabled="true" android:textColor="#000000" /> <RadioButton android:id="@+id/answer4" android:layout_width="fill_parent" android:layout_height="wrap_content" android:button="@drawable/radiostate" android:layout_marginTop="10dp" android:checked="false" android:hapticFeedbackEnabled="true" android:textColor="#000000" /> </RadioGroup> <!-- <ImageView android:id="@+id/pen_and_paper_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:src="@drawable/pen_paper" android:visibility="gone" /> --> <ImageButton android:id="@+id/erase" android:layout_width="35dp" android:layout_height="35dp" android:layout_above="@+id/radio_question_group" android:layout_below="@+id/LinearLayout1" android:layout_toRightOf="@+id/answer_choices" android:onClick="onEraseChoice" android:src="@drawable/eraser" android:visibility="visible" /> </RelativeLayout> </ScrollView> 

Creo que esto es lo que estás buscando:

Desplazar evento en android ScrollView

Debe establecer OntouchListener en ScrollView.

 ScrollView scrollView = (ScrollView)findViewById(R.id.scrollView1); scrollView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()){ case MotionEvent.ACTION_DOWN:{ downX = event.getX();} case MotionEvent.ACTION_UP:{ upX = event.getX(); float deltaX = downX - upX; if(Math.abs(deltaX)>0){ if(deltaX>=0){ swipeToRight(); return true; }else{ swipeToLeft(); return true; } } } } return false; } }); 

mSlop = ViewConfiguration.get (getActivity ()). getScaledTouchSlop (); boolean mIsSliping = false;

 public boolean onTouch(View v, MotionEvent event) { //Timber.d("onTouch, v.getId %d, event.getActionMasked %d", v.getId(), event.getActionMasked()); switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: mDownX = event.getX(); mDownY = event.getY(); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: mIsSwiping = false; break; case MotionEvent.ACTION_MOVE: float deltaX = event.getX() - mDownX; float deltaY = event.getY() - mDownY; if (!mIsSwiping && Math.abs(deltaX) > mSlop && Math.abs(deltaY) < mSlop) { mIsSwiping = true; if (deltaX > 0) { Timber.d("swipe from left to right, slop %d", mSlop); // TODO: } else { Timber.d("swipe from right to left"); // TODO: } return true; } else if (!mIsSwiping && Math.abs(deltaY) > mSlop) { mIsSwiping = true; Timber.d("swipe vertical"); return true; } } return false; } 
  • Creación de un ScrollView bloqueado en Android
  • Datos de carga de Firebase dinámicamente en desplazamiento
  • Android - ¿Cómo hacer una restricción desplazable?
  • La vista de desplazamiento de Android es demasiado larga
  • Android: ScrollView vs NestedScrollView
  • Android parent onTouchEvent secuestro de niños onTouchEvent
  • Scrollview: compruebe si una vista es visible en la pantalla o no
  • Cómo detener la pantalla de desplazamiento a la parte superior de la selección de spinner en android
  • ¿Cómo puede alguien crear una lista de desplazamiento horizontal con efecto de ajuste al centro
  • Hacer un scrollView autodescrollar con arrastrar y soltar en Android
  • ¿Cómo hacer que RecyclerView recicle dentro de NestedScrollView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.