Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


El método onTouchEvent no se llama

Estoy teniendo un problema que mi método

@Override public boolean onTouchEvent(MotionEvent event) { return gestureDetector.onTouchEvent(event); } 

Es más nuevo llamado. Cualquier idea ¿por qué es así? Estoy construyendo una aplicación de Google google api 4.0.3, y estoy trzing para permitir swipes para mi viewFliper. Sin embargo no puede trabajar si en tacto es más nuevo llamado.

  • Procesamiento de fragmentos Google Map V2 de Google Studio
  • Error 12501 de autenticación con inicio de sesión de Google
  • Añadir sombra para desplazar la navegación
  • Reaccionar vista personalizada nativa, sin propType para prop nativo
  • Progressbar togther con asyncTask
  • Borrar una imagen girada en Android no muestra borrar la ruta correcta
  • Btw:

      public class MainActivity extends SherlockMapActivity implements ActionBar.TabListener { 

    Esa es la declaración de mi actividad. Y para detectar swipes he implementado que:

      SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener(){ @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) { float sensitvity = 50; if((e1.getX() - e2.getX()) > sensitvity){ SwipeLeft(); }else if((e2.getX() - e1.getX()) > sensitvity){ SwipeRight(); } return true; } }; GestureDetector gestureDetector= new GestureDetector(simpleOnGestureListener); 

    ¡Gracias!

    editar:

    Main.xml:

      <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <ViewFlipper android:id="@+id/ViewFlipper" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#ffffff" > <include android:layout_height="match_parent" layout="@layout/mymain" /> <include layout="@layout/secondmain" /> <include layout="@layout/thirdmain" /> <include layout="@layout/fourthmain" /> </ViewFlipper> </LinearLayout> 

    Edit2: todos mis diseños incluidos han scrollview implementado es posible que el desplazamiento toma que los eventos y manejarlos. ¿Y cómo detectar gestos si es así?

  • ¿Qué Android IDE es mejor - Android Studio o Eclipse?
  • Actividad: Alias ​​se quita en la actualización de la aplicación
  • ¿Cómo puedo examinar el árbol de fuentes completo con un procesador de anotación?
  • Explicación de Android runOnUiThread
  • Android Diseño Lib CollapsingToolbarLayout interrumpe cuando se toca horizontal RecyclerView
  • Android - cómo obtener android.R.anim.slide_in_right
  • 4 Solutions collect form web for “El método onTouchEvent no se llama”

    Bueno, yo encuentro una solución perfecta. I mplemented nuevo método:

      @Override public boolean dispatchTouchEvent(MotionEvent event) { View v = getCurrentFocus(); boolean ret = super.dispatchTouchEvent(event); 

    Y ahora todo funciona bien!

    Gracias a todos por ayudarme a llegar hasta aquí …

    Editar:

    Mi código final:

     @Override public boolean dispatchTouchEvent(MotionEvent event) { View v = getCurrentFocus(); if (v instanceof EditText) { View w = getCurrentFocus(); int scrcoords[] = new int[2]; w.getLocationOnScreen(scrcoords); float x = event.getRawX() + w.getLeft() - scrcoords[0]; float y = event.getRawY() + w.getTop() - scrcoords[1]; if (event.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w .getBottom())) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindow().getCurrentFocus() .getWindowToken(), 0); } } boolean ret = super.dispatchTouchEvent(event); return ret; } 

    Ok, ahora estoy seguro de que el problema es que scrollview manejar toques, por lo que de todos modos ignorar que y sin embargo, el desplazamiento disponible?

    Sí, ese es el problema, cuando androide maneja eventos táctiles cada evento va de niño a padre, por lo que primero es manejado por ViewFlipper, pero luego va a ScrollView. Así que tienes que implementar getParent (). RequestDisallowInterceptTouchEvent (true) (vea la clase ViewParent ) para hacer que todos los eventos táctiles sean manejados por ViewFlipper, y simplemente detectar la dirección del gesto si horizontal, luego voltear la vista si no entonces pasar el evento touch ScrollView O simplemente desplazarse por ScrollView mediante programación

    EDIT: También puede implementar OnTouchListener en su ViewFlipper y en este activador de escucha GestureDetector.onTouchEvent (event), pero esto también requiere requestDisallowInterceptTouchEvent de su vista padre establecida en true

    Como escribí en los comentarios del post de Gabrjan que esto se dispara continuamente mientras toca la pantalla, en realidad hay una manera fácil de obtener sólo los eventos de touchdown:

     @Override public boolean dispatchTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { System.out.println("TOUCH DOWN!"); //set immersive mode here, or whatever... } return super.dispatchTouchEvent(event); } 

    Esto fue muy útil para mí para poner el Android en el modo de inmersión siempre que cualquier parte de la pantalla se tocó independientemente de qué elemento. ¡Pero no deseé fijar el modo inmersivo repetidamente!

    Todos los gestos y eventos táctiles van al elemento más bajo en la jerarquía de la visión que puede manejarlo. Por lo tanto, si tiene algún oyente en el diseño incluido, puede llamar a ((TypeOfParrent)yourView.getParent()).onTouchEvent(event) para delegar el evento en el controlador que desea.

    ADD: Te recomiendo que utilices ViewPager para voltear las vistas. En ViewPager no necesita implementar su propio onGestureListener.

    http://www.edumobile.org/android/android-beginner-tutorials/view-pager-example-in-android-development/

    http://developer.android.com/reference/android/support/v4/view/ViewPager.html

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.