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


Manejo de eventos táctiles en SurfaceView sobre Maps API v2

Tengo problemas con la creación de un controlador de eventos que se activará mientras el usuario mueve el mapa. Hay un OnCameraChangeListener , pero se activa después de que el mapa se detiene.

He creado SurfaceView sobre Maps, y ahora no tengo idea de cómo manejar el evento OnGestureListener de OnGestureListener .

Aquí está el código de ejemplo:

 SurfaceView sv = new SView(); sv.setZOrderOnTop(true); mapView.addView(sv); 

 public class SView extends SurfaceView implements Runnable, android.view.GestureDetector.OnGestureListener { ... @Override public boolean onTouchEvent(MotionEvent event) { //this worked in Overlay in Maps API v1 if(gestureDetector.onTouchEvent(event)) { return true; } return false; } ... @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Log.i("test","onScroll"); return false; } ... } 

Si establezco return true en onTouchEvent , onScroll se llama, pero no puedo mover el Map (lo cual es obvio, el evento se consume), y no sé cómo enviar eventos hasta el objeto Map.

¿Alguien sabe cómo actualizar SurfaceView mientras Map se mueve?

  • Android Google Maps transparencia
  • Android 2.3 Google Maps Falta el recurso maps_watermark_dark.png
  • Google Place API para espacios de estacionamiento
  • Android Google MapView muestra sólo los mosaicos vacíos
  • Android Google Maps v2 dentro de Scrollview muestra mosaicos grises en algunos dispositivos
  • Android Google Maps v2: en el oyente de clics no responde
  • Adición de botones para correlacionar infowindow android
  • ¿Por qué google map v2 de repente se estrelló por java.lang.NullPointerException: Intento de obtener la longitud de matriz nula?
  • 2 Solutions collect form web for “Manejo de eventos táctiles en SurfaceView sobre Maps API v2”

    He implementado alguna otra solución para resolver este problema. Lo que hice – es que coloque mi GoogleMap dentro de la costumbre RelativeLayout. Después de que onInterceptTouchEvent callback funciona como un encanto y mapa subyacente recibe eventos táctiles como se esperaba

    Aquí está mi xml:

     <com.my.package.name.map.MapRelativeLayout android:id="@+id/map_root_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment"/> </com.my.package.name.map.MapRelativeLayout> 

    Y el diseño relativo personalizado:

     package com.my.package.name.map; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.widget.RelativeLayout; public class MapRelativeLayout extends RelativeLayout { private GestureDetector gestureDetector; public MapRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); gestureDetector = new GestureDetector(context, new GestureListener()); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { gestureDetector.onTouchEvent(ev); return false; } private class GestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onDown(MotionEvent e) { return true; } @Override public boolean onDoubleTap(MotionEvent e) { return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { //do whatever you want here return false; } } } 

    Desde: Android ListView: la sustitución de las causas de desplazamiento no se ejecutan

    ¿Ha intentado llamar a super.onTouchEvent(event) en su método onTouchEvent ?

    Editar – Creo que desea devolver false también en su método onScroll .

    Entonces su método onTouchEvent debe ser:

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

    Otros posibles enlaces útiles:

    • Android: cómo saber si una vista se desplaza
    • Añadir GestureOverlayView a mi clase SurfaceView, ¿cómo agregar a la jerarquía de vista?
    • Android onFling no responde
    • OnGestureListener onDown método nunca se llama
    • Anulación de onTouchEvent que compite con ScrollView
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.