我目前正在使用Google Maps API v2开发适用于Android的应用。即使我在大学学习(而且我还在学习)Java,我对android开发也很陌生。
我设法创建地图,并添加我的个人标记。每个标记都需要自己的信息窗口,这就是问题所在。我只能修改标题和片段,但在框中我需要为不同的标记放置不同的图片。
标记代表图书馆。
实施例: 标记1: 名称 服务(空调,食品,插头等的不同图像) 可用座位数
姓名不是问题:它的标题。座位也由代码表示。但图像是问题:我找不到在不同窗口中显示不同图像的方法。
以下是主要活动的Java代码:
package com.matteocunsolo.apposto;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.InfoWindowAdapter;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends FragmentActivity {
class MyInfoWindowAdapter implements InfoWindowAdapter{
private final View myContentsView;
MyInfoWindowAdapter(){
myContentsView = getLayoutInflater().inflate(R.layout.custom_info_contents, null);
}
@Override
public View getInfoContents(Marker marker) {
TextView tvTitle = ((TextView)myContentsView.findViewById(R.id.title));
tvTitle.setText(marker.getTitle());
TextView tvSnippet = ((TextView)myContentsView.findViewById(R.id.snippet));
tvSnippet.setText(marker.getSnippet());
return myContentsView;
}
@Override
public View getInfoWindow(Marker marker) {
// TODO Auto-generated method stub
return null;
}
}
// Google Map
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
// Loading map
initializeMap();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* function to load map. If map is not created it will create it for you
* */
private void initializeMap() {
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
googleMap.getUiSettings().setZoomGesturesEnabled(true);
if(googleMap != null) {
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
}
googleMap.getUiSettings().setRotateGesturesEnabled(true);
CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(41.903021, 12.514744)).zoom(15).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
createMarkers();
googleMap.setInfoWindowAdapter(new MyInfoWindowAdapter());
// check if map is created successfully or not
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
}
}
}
void createMarkers() {
String name = "Biblioteca Alessandrina";
double latitude = 41.903021;
double longitude = 12.514744;
Marker m = googleMap.addMarker(new MarkerOptions().title(name).position(new LatLng(latitude, longitude)).snippet("250"));
String name2 = "Biblioteca CIAO";
double latitude2 = 41.906332;
double longitude2 = 12.517669;
Marker m2 = googleMap.addMarker(new MarkerOptions().title(name2 + "\n").position(new LatLng(latitude2, longitude2)).snippet("134"));
}
@Override
protected void onResume() {
super.onResume();
initializeMap();
}
}
这是信息窗口的XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginLeft="5dp"
android:text="title"
android:textSize="25dp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="23dp"
android:layout_marginLeft="5dp"
android:text="Services: "
android:textSize="20dp" />
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginRight="5dp"
android:layout_marginTop="3dp"
android:adjustViewBounds="true"
android:src="@drawable/ic_launcher" />
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginRight="5dp"
android:layout_marginTop="3dp"
android:adjustViewBounds="true"
android:src="@drawable/ic_launcher" />
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginRight="5dp"
android:layout_marginTop="3dp"
android:adjustViewBounds="true"
android:src="@drawable/ic_launcher" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="Seats: "
android:textSize="20dp" />
<TextView
android:id="@+id/snippet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:textSize="20dp"
android:text="150" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
答案 0 :(得分:0)
我只能修改标题和片段,但在框中我还需要为不同的标记添加不同的图片。
您的getInfoContents()
方法肯定会发生更多变化。
但图像是问题:我无法找到在不同窗口中显示不同图像的方法
使用ImageView
检索findViewById()
,并在getInfoContents()
方法中设置要用于该图像的图像。这与您更改TextView
小部件的方式没有什么不同。