À l'aide d'un fichier xml de Mise en page pour une Carte Google Marqueur pour Android
Je veux utiliser une mise en page et pas un drawable pour mon marker
je suis avec l'aide de l'Api Google Maps 2 pour une application Android.
Comme ceci:
Marker m = googleMap
.addMarker(new MarkerOptions()
.position(LOC)
.snippet(user)
.title(name)
.icon(BitmapDescriptorFactory.fromResource(R.layout.map_marker)));
Cependant, il semble que cela est uniquement conçu pour une utilisation à partir de drawable
dossier.
J'ai tout simplement ce qu'est une image avec un arrière-plan où je peux changer les couleurs basé sur le type de marqueur. C'est la mise en page que je veux utiliser:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="#222"
android:id="@+id/llMarker">
<ImageView
android:id="@+id/ivMarker"
android:layout_marginTop="5dp"
android:layout_width="40dp"
android:layout_height="40dp" />
</LinearLayout>
Assez basique. Comment puis-je l'utiliser comme un marqueur? (ou au moins de reproduire le résultat final que je vais?)
Les documents de dire que vous pouvez utiliser ceci:
fromResource (int resourceId)
Donc, je suppose une mise en page peut travailler.
Mise à JOUR:
J'ai pris le concept de réponse ci-dessous et retravaillé certaines choses; cela ne fonctionne toujours pas; pas d'erreurs. Tout ne sera pas afficher l'image.
LayoutInflater inflater = (LayoutInflater) getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.map_marker, null);
m = googleMap
.addMarker(new MarkerOptions()
.position(LOC)
.snippet(user)
.title(name)
.icon(BitmapDescriptorFactory.fromBitmap(loadBitmapFromView(v))));
//méthode
public static Bitmap loadBitmapFromView(View v) {
if (v.getMeasuredHeight() <= 0) {
v.measure(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
v.draw(c);
return b;
}
return null;
}
Voici ce que je fais maintenant (voir mise à jour du code); à l'aide de la méthode à partir de ce lien. J'ai en fait gonflé à une mauvaise mise en page une fois l'accident (une ligne de mise en page à partir d'un
adapter
getView()
méthode). Il a ESSAYÉ de montrer que sur la carte. Alors j'ai utilisé de la bonne mise en page comme vu ci-dessus (avec et sans le ImageView
et il ne montre RIEN). Donc je pense que le code est plus proche. Peut-être que le problème est du xml?Si vous déboguez, faut-il aller à l'intérieur de l'instruction si?
En fait oui, et maintenant il est de travail. Pas sûr de ce qui s'est passé la première fois. Je vous marquera correcte. J'ai juste besoin de comprendre la partie sur la façon de modifier la mise en page de manière dynamique (
LinearLayout
couleur d'arrière-plan et ImageView
src); mais je pense que je peux obtenir qu'un travail..Comment avez-vous résolu le problème: j'ai le même problème: Avez-vous une chance de résoudre ce problème? si oui, comment? J'ai un problème similaire: stackoverflow.com/questions/25965799/xml-layout-to-map-marker
OriginalL'auteur KickingLettuce | 2014-07-12
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser directement une mise en page avec
BitmapDescriptorFactory.fromResource()
:Cependant, vous pouvez dessiner la mise en page dans un bitmap, et ensuite l'utiliser. Vous aurez besoin de:
LayoutInflater
).Bitmap
, viaCanvas
, par exemple comme décrit ici.BitmapDescriptorFactory.fromBitmap()
.Pas de travail lors de la mise en page à partir de xml est wrap_content, il n'a pas de hauteur et de largeur
comment gérer l'événement click du composant en vue?
J'ai vue personnalisée avec plusieurs composants pour le marqueur, comment gérer l'événement click de composants.Comment faire pour résoudre ce stackoverflow.com/questions/46622384/...
OriginalL'auteur matiash
La suite fonctionné pour moi:
map_circle_text.xml:
map_circle_pin.xml:
OriginalL'auteur Adam Johns
J'ai aussi eu ce problème et ce qui a fonctionné pour moi
OriginalL'auteur YoShade
Faire une mise en page pour votre marqueur personnalisé:
Créer votre propre
MarkerView
comme ceci:Maintenant, vous avez besoin pour obtenir un
BitmapDescriptor
de cette vue personnalisée:Puis enfin, vous pouvez l'appliquer sur votre marqueur comme ceci:
OriginalL'auteur Divya Vikash