@ape a écrit une réponse ici sur la façon d'intercepter les clics de la carte, mais j'ai besoin d'intercepter les touches, et ensuite il a suggéré le lien suivant dans un commentaire de sa réponse, Comment gérer l'événement onTouch pour la carte dans l'API Google Map v2 ? .
Cette solution semble être une solution de contournement possible, mais le code proposé était incomplet. Pour cette raison, je l'ai réécrit et testé, et maintenant il fonctionne.
Voici le code de travail :
J'ai créé la classe MySupportMapFragment.java
import com.google.android.gms.maps.SupportMapFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MySupportMapFragment extends SupportMapFragment {
public View mOriginalContentView;
public TouchableWrapper mTouchView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
mOriginalContentView = super.onCreateView(inflater, parent, savedInstanceState);
mTouchView = new TouchableWrapper(getActivity());
mTouchView.addView(mOriginalContentView);
return mTouchView;
}
@Override
public View getView() {
return mOriginalContentView;
}
}
J'ai même créé la classe TouchableWrapper.java :
import android.content.Context;
import android.view.MotionEvent;
import android.widget.FrameLayout;
public class TouchableWrapper extends FrameLayout {
public TouchableWrapper(Context context) {
super(context);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
MainActivity.mMapIsTouched = true;
break;
case MotionEvent.ACTION_UP:
MainActivity.mMapIsTouched = false;
break;
}
return super.dispatchTouchEvent(event);
}
}
Dans la mise en page, je le déclare de cette façon :
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_below="@+id/buttonBar"
class="com.myFactory.myApp.MySupportMapFragment"
/>
Juste pour tester, dans l'activité principale, j'ai écrit seulement ce qui suit :
public class MainActivity extends FragmentActivity {
public static boolean mMapIsTouched = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
3 votes
Si quelqu'un a répondu à votre question, marquez votre question comme ayant reçu une réponse. De plus, vous avez explicitement dit "clique sur la carte", donc pas besoin de reprocher à ape ou CommonsWare de ne pas avoir su lire dans vos pensées.
1 votes
Je pourrais même le marquer comme répondu mais j'ai écrit "map touch", pas map "click". @ape dans un commentaire a suggéré un autre fil qui résout mon problème ( stackoverflow.com/questions/13722869/ ) mais je ne peux pas l'utiliser, comme je l'ai écrit dans les commentaires. Je n'arrive pas à trouver la solution sur ce fil de discussion ni sur le fil lié. Dois-je poser une autre question ?
0 votes
Votre réponse doit être une réponse, et non une modification de la question. Vous l'avez rendu très difficile à suivre. Si votre propre réponse est celle qui vous a le plus aidé, vous pouvez même l'accepter pour le montrer aux autres.
0 votes
Je suis nouveau sur stackOverflow. je peux le faire !
0 votes
Pourquoi ne pas mettre en œuvre
onCameraChange(CameraPosition position)
?0 votes
La caméra change (une ou plusieurs fois) lors du chargement initial de la carte, ce qui n'est pas très fiable car il y a des appels onCameraChange même lorsque l'utilisateur ne touche pas la carte.
0 votes
Pourquoi n'utilisez-vous pas le CameraChangeListener ?