Posts Tagged ‘ Scroll ’

Problema scroll en Mapview dentro de un ScrollView


Programando en Android, me he encontrado que si tenemos un MapView dentro de un ScrollView el scroll que prevalece es el del componente padre ScrollView, para poder activar el scroll en el MapView, os aporto la siguiente solución:

Crear nueva clase MapViewScrollView:

package com.android.auxiliar;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;

import com.google.android.maps.MapView;

public class MapViewScrollView extends MapView {

public MapViewScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
this.getParent().requestDisallowInterceptTouchEvent(true);
break;

case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
this.getParent().requestDisallowInterceptTouchEvent(false);
break;
}

// Handle MapView’s touch events.
super.onTouchEvent(ev);
return true;
}

}

 

Después en el layout donde tengamos, sustituímos el componente MapView de google por el nuestro:

<!– Mapa com.google.android.maps.MapView–>
<com.android.auxiliar.MapViewScrollView
android:id=”@+id/mapa”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:clickable=”true”
android:apiKey=”vuestraKEY”/>

 

Por último desde la Activity solo tenemos que llamar al componente de la siguiente manera:

MapViewScrollView _mapa = = (MapViewScrollView)findViewById(R.id.mapa);

 

Con esto conseguimos que cuando estamos interactuando con el MapView desactive del componente padre ScrollView los desplazamientos en vertical, cuando salimos del MapView podemos comprobar que sí funcionan de nuevo.