Ich mache eine Map-Anleitung für Android mit Mapbox und Android Studio IDE, aber ich habe eine harte Zeit mit dem benutzerdefinierten Infofenster zu tun.Ich kann eine Ansicht in einem benutzerdefinierten Infowindow in Mapbox nicht aufblasen. (Einstellung getinfowindow mit Bildern)
Ich möchte das Infowindow aufblähen (das nachdem ich auf einen Marker geklickt habe), aber bis jetzt möchte ich ein XML für eine einfache Anpassung verwenden (Ich bin offen für Vorschläge, ich muss noch ein anderes hinzufügen Bild für jeden der Marker.). Ich benutze eine Anpassung im Code selbst nur zum Testen, aber ich möchte ein XML für dieses Ziel aufblasen.
Die folgenden Bilder unten zeigen den Prototyp I für die Ansicht und das nächste Bild entwickle zeigt, was ich eigentlich aus dem Test bekommen bin (Der Code ist in der getInfoWindow Funktion) I mit dem Code entwickle unter:
Prototype in XML (Where as: ID-Translation-Type)
folgt hier den Teil der Karte Code, den ich verwende, und der nächste Code zeigt den XML-Code.
Hauptcode (Mapa.Java):
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MapboxAccountManager.start(this,getString(R.string.access_token));
setContentView(R.layout.activity_main);
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(MapboxMap mapboxMap) {
IconFactory iconFactory = IconFactory.getInstance(Mapa.this);
Drawable iconDrawable = ContextCompat.getDrawable(Mapa.this, R.drawable.infoicon);
Icon icon = iconFactory.fromDrawable(iconDrawable);
mapboxMap.setInfoWindowAdapter(new MapboxMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(@NonNull Marker marker) {
View v = getLayoutInflater().inflate(R.layout.janela_infowindow, null);
TextView titulo = (TextView) v.findViewById(R.id.titulo);
TextView desc = (TextView) v.findViewById(R.id.descricao);
titulo.setText(marker.getTitle());
desc.setText(marker.getSnippet());
titulo.setTextColor(Color.WHITE);
desc.setTextColor(Color.WHITE);
v.setBackgroundColor(Color.rgb(27,77,62));
v.setPadding(10, 10, 10, 10);
return v;
}
});
mapboxMap.addMarker(new MarkerOptions()
.position(new LatLng(-15.76363, -47.86949))
.title("ICC Centro")
.snippet(getString(R.string.desc_ICC_Centro))
.icon(icon));
mapboxMap.addMarker(new MarkerOptions()
.position(new LatLng(-15.7629936, -47.86717415))
.title("Reitoria")
.snippet(getString(R.string.desc_Reitoria))
.icon(icon));
mapboxMap.addMarker(new MarkerOptions()
.position(new LatLng(-15.76196106, -47.87008166))
.title("FAU")
.snippet(getString(R.string.desc_FAU))
.icon(icon));
}
});
}
XML-Code (janela_infowindow.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="200dp"
android:layout_height="270dp"
android:weightSum="1">
<ImageView
android:layout_width="200dp"
android:layout_height="0dp"
android:id="@+id/imagem"
android:adjustViewBounds="true"
android:layout_gravity="end"
android:contentDescription="@string/nome_local"
android:layout_weight="0.11" />
<TextView
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="-30dp"
android:gravity="center"
android:textAlignment="center"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/titulo"
android:typeface="serif"
android:textStyle="bold"/>
<TextView
android:layout_width="200dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/descricao" />
EDIT: Ich bin nicht sicher, ob das ist richtig, aber jedes Mal, wenn ich die Höhe, Breite einstellen werde oder stellen Sie das Bild, es mir diese Fehlermeldung gibt (Diese Fehlermeldung wurde nach dem Einstellen der Höhe und Breite angegeben):
FATAL EXCEPTION: main
Process: afinal.projeto.unb.guiadoaluno, PID: 8979
java.lang.NullPointerException: Attempt to write to field 'int android.view.ViewGroup$LayoutParams.height' on a null object reference
at afinal.projeto.unb.guiadoaluno.Mapa$1$1.getInfoWindow(Mapa.java:87)
at com.mapbox.mapboxsdk.annotations.Marker.showInfoWindow(Marker.java:165)
at com.mapbox.mapboxsdk.maps.MapboxMap.selectMarker(MapboxMap.java:1295)
at com.mapbox.mapboxsdk.maps.MapView$GestureListener.onSingleTapConfirmed(MapView.java:1792)
at android.view.GestureDetector$GestureHandler.handleMessage(GestureDetector.java:280)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5940)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
EDIT 2: Ok, so dass ich immer mit der Tatsache frustriert, dass ich kann‘ t ein Bild in die getInfoWindow, es ist egal, wie ich die Bilder einstellen, es ist immer die gleiche Fehlermeldung. Ich weiß, dass es möglich ist, Bilder zu setzen, aber nur wenn Sie das Objekt in der Java-Datei erstellen, ist es nicht möglich, dasselbe zu tun, wenn Sie Bilder von einem überhöhten XML-Code ändern wollen. Dies ist die Botschaft, die ich egal, was ich erkläre, einstellen oder das Bild innerhalb der Java-Datei:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference
Wenn jemand weiß, wie das zu lösen, ich glaube das wäre meine Frage hier in Stack-Überlauf schließen.
Ich habe die fatale Nachricht hinzugefügt, wenn ich versuche, das Info-Fenster in der Java-Datei zu bearbeiten, anstatt es nur mit dem XML-Code aufzublasen. –