Android: OnTouch, MotionEvent.ACTION_MOVE no está reconocido?

Aquí está mi código, quiero detectar cuando mi dedo va por la pantalla así que cuando toco la pantalla detecto el ACTION_DOWN pero cuando voy abajo de la pantalla con mi dedo, ACTION_MOVE no es reconocido, ni ACTION_UP ¿Sabes por qué?

  float x=0; protected void onCreate(Bundle savedInstanceState) { do things ImageView image2 = (ImageView) findViewById(R.id.imageView3); image2.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View arg0, MotionEvent arg1) { if (arg1.getAction()==MotionEvent.ACTION_DOWN) { x=arg1.getX(); } else { if (arg1.getAction()==MotionEvent.ACTION_MOVE){ if (arg1.getX()>x) { do things } } else { if (arg1.getAction()==MotionEvent.ACTION_UP){ do things } } } } 

Si su método onTouch() devuelve false en respuesta al ACTION_DOWN MotionEvent inicial, no recibirá ninguno de los sucesos posteriores que pertenezcan a este gesto en particular. En su lugar, esos eventos táctiles se presentarán al padre en la jerarquía.

Para onTouch() otra manera, si devuelves false de onTouch() durante el inicio de un gesto ( ACTION_DOWN ), indica que el método ya no quiere ver más el gesto y que los eventos del gesto deben ir al Padre View .

Como markproxy señala en los comentarios siguientes, devolver false cuando el MotionEvent es algo distinto de un ACTION_DOWN , como por ejemplo un ACTION_MOVE , no impedirá que MotionEvent s subsecuentes en el gesto actual se presente a la View .

MotionEvent.getAction() devuelve más que sólo el indicador. Pruebe lo siguiente:

 int action = arg1.getAction() & MotionEvent.ACTION_MASK; if (action == MotionEvent.ACTION_MOVE) ... 

También puede utilizar MotionEvent.getActionMasked() . Véase también http://developer.android.com/reference/android/view/MotionEvent.html

Un par de cosas:

1) Necesitas devolver un booleano para mostrar que has visto consumido el evento.

Aquí está una implementación muy sencilla que funciona:

 package com.test; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; public class TestProjActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final String TAG = "TEST_TAG"; View v = findViewById(R.id.touchTest); v.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction()==MotionEvent.ACTION_DOWN) { Log.e(TAG,"Down"); return true; } if (event.getAction()==MotionEvent.ACTION_MOVE){ Log.e(TAG,"Move"); return true; } if (event.getAction()==MotionEvent.ACTION_UP){ Log.e(TAG,"Up"); return true; } return false; } }); } } 

Aquí está el archivo main.xml

::

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/touchTest" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> 

Compruebe el valor de retorno del método onTouch ().

Debe ser verdad, no falso.

 return true; 

Espero que funcione.

Hay dos casos:

1) Si también establece OnClickListener () -> onTouch () debe devolver false.

(Si onTouch () devuelve true, OnClickListener () no funcionará)

2) Si no configura OnClickListener () -> onTouch () debería devolver true.

(Si onTouch () devuelve false, sólo se llama ACTION_DOWN)

  • Cómo implementar tanto ontouch y también onfling en un mismo listview?
  • Pase Android NestedScrollView desplazamientos horizontales a un padre Ver
  • Reducir animadamente el tamaño del botón en la prensa y recuperar su tamaño en la versión
  • OnTouchListener para toda la pantalla
  • Android WindowManager TYPE_SYSTEM_ALERT Diseño en el tacto
  • Android: ¿Cómo determinar el índice de caracteres de la posición de un evento táctil en TextView?
  • Implementación de la interfaz View.IOnTouchListener
  • Android: ImageView getID (); Devolver entero
  • Cómo implementar OnTouch Listener en XML
  • Tiempo de aumento de OnLongPress
  • OnTouch funciona, pero OnClickListener no?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.