Creare un SupportMapFragmet personalizzato in modo che possiamo ignorare il suo evento di tocco:
Soluzione alternativaMapFragment.java
import android.content.Context;
import android.os.Bundle;
import android.widget.FrameLayout;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.gms.maps.SupportMapFragment;
public class WorkaroundMapFragment extends SupportMapFragment {
private OnTouchListener mListener;
@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle savedInstance) {
View layout = super.onCreateView(layoutInflater, viewGroup, savedInstance);
TouchableWrapper frameLayout = new TouchableWrapper(getActivity());
frameLayout.setBackgroundColor(getResources().getColor(android.R.color.transparent));
((ViewGroup) layout).addView(frameLayout,
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
return layout;
}
public void setListener(OnTouchListener listener) {
mListener = listener;
}
public interface OnTouchListener {
public abstract void onTouch();
}
public class TouchableWrapper extends FrameLayout {
public TouchableWrapper(Context context) {
super(context);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mListener.onTouch();
break;
case MotionEvent.ACTION_UP:
mListener.onTouch();
break;
}
return super.dispatchTouchEvent(event);
}
}
}
In questa classe di cui sopra, abbiamo intercettare l'evento tocco utilizzando classe TouchableWrapper che estende il FrameLayout. Esiste anche un listener personalizzato OnTouchListener per inviare l'evento di tocco all'attività principale MyMapActivity che gestisce la mappa. Quando si verifica un evento touch, viene chiamato dispatchTouchEvent e il listener mListener lo gestirà.
Quindi sostituire classe frammento in XML con questo class="packagename.WorkaroundMapFragment"
invece di com.google.android.gms.maps.SupportMapFragment
Poi nella vostra attività inizializzare mappa come segue:
private GoogleMap mMap;
all'interno onCreate fare questo:
// check if we have got the googleMap already
if (mMap == null) {
mMap = ((WorkaroundMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.getUiSettings().setZoomControlsEnabled(true);
mScrollView = (ScrollView) findViewById(R.id.scrollMap); //parent scrollview in xml, give your scrollview id value
((WorkaroundMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.setListener(new WorkaroundMapFragment.OnTouchListener() {
@Override
public void onTouch() {
mScrollView.requestDisallowInterceptTouchEvent(true);
}
});
}
}
fonte
2015-05-29 09:02:55
controllare questa risposta :) http://stackoverflow.com/a/17317176/3215911 dovrebbe essere utile! – iroiroys
ho aggiunto un'immagine trasparente ma non posso ancora ingrandire la vista mappa di google verticalmente – Malo