Android 地图的数据源和自定义标记 API
Data Source and Custom Markers for Android Maps API
我目前正在尝试构建一个 yelp-like 应用程序作为个人项目,我计划使用 Google 地图 API + 地图实用程序来帮助我,但我有两个简单的问题。
首先是为什么我不能更改自定义标记的背景颜色?每次我尝试,背景仍然是默认的白色。
这是我的代码:
IconGenerator tc = new IconGenerator(this);
Bitmap bmp = tc.makeIcon("1");
tc.setColor(IconGenerator.STYLE_RED);
Marker marker = map.addMarker(new MarkerOptions()
.position(new LatLng(38.681512, -90.248927))
.title("San Francisco")
.icon(BitmapDescriptorFactory.fromBitmap(bmp)));
我的下一个问题是如何不对标记内的文本进行硬编码?我想说的是如何对我的应用程序进行编程,这样我就不必对每个标记进行硬编码,因为我不希望有 100 个不同的条目都只是做同样的事情,只是图标不同标题(即标记上的数字,就像 Yelp 在他们的应用程序中所做的那样)和略有不同的描述(另请参阅 Yelp)。
The first is why can't I change the background color of my custom marker? Every time I try, the background is still the default white.
我在您的代码中没有看到任何设置背景的内容。因此,我希望您的背景不会改变。快速浏览 IconGenerator
JavaDocs 会发现 a setBackground()
method 可以满足您的需要。
My next question is how can I not hard code the text inside the markers?
嗯,文本必须来自某个地方。这些位置可能来自相同的“某处”。这可能是数据库、文件或 Web 服务调用的结果,或其他任何东西。
因此,例如,如果您从 Web 服务获取数据,您将遍历 Web 服务响应(例如,从 JSON 解析的对象数组)并调用 addMarker()
对于每个。不过请记住,addMarker()
需要在主应用程序线程上调用,一次执行其中的 100 个可能会冻结你的 UI.
关于信息的定制windows。你可以 look at the documentation here.
我继续做了一个简单的例子。
设置InfoWindowAdapter
的代码:
map.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
@Override
public View getInfoContents(Marker arg0) {
View v = getLayoutInflater().inflate(R.layout.customlayout, null);
TextView tLocation = (TextView) v.findViewById(R.id.location);
TextView tSnippet = (TextView) v.findViewById(R.id.population);
tLocation.setText(arg0.getTitle());
tSnippet.setText(arg0.getSnippet());
return v;
}
});
customlayout.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp"
android:orientation="vertical"
android:background="#000000">
<TextView
android:id="@+id/location"
android:textColor="#D3649F"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/population"
android:textColor="#D3649F"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
结果:
我目前正在尝试构建一个 yelp-like 应用程序作为个人项目,我计划使用 Google 地图 API + 地图实用程序来帮助我,但我有两个简单的问题。
首先是为什么我不能更改自定义标记的背景颜色?每次我尝试,背景仍然是默认的白色。 这是我的代码:
IconGenerator tc = new IconGenerator(this);
Bitmap bmp = tc.makeIcon("1");
tc.setColor(IconGenerator.STYLE_RED);
Marker marker = map.addMarker(new MarkerOptions()
.position(new LatLng(38.681512, -90.248927))
.title("San Francisco")
.icon(BitmapDescriptorFactory.fromBitmap(bmp)));
我的下一个问题是如何不对标记内的文本进行硬编码?我想说的是如何对我的应用程序进行编程,这样我就不必对每个标记进行硬编码,因为我不希望有 100 个不同的条目都只是做同样的事情,只是图标不同标题(即标记上的数字,就像 Yelp 在他们的应用程序中所做的那样)和略有不同的描述(另请参阅 Yelp)。
The first is why can't I change the background color of my custom marker? Every time I try, the background is still the default white.
我在您的代码中没有看到任何设置背景的内容。因此,我希望您的背景不会改变。快速浏览 IconGenerator
JavaDocs 会发现 a setBackground()
method 可以满足您的需要。
My next question is how can I not hard code the text inside the markers?
嗯,文本必须来自某个地方。这些位置可能来自相同的“某处”。这可能是数据库、文件或 Web 服务调用的结果,或其他任何东西。
因此,例如,如果您从 Web 服务获取数据,您将遍历 Web 服务响应(例如,从 JSON 解析的对象数组)并调用 addMarker()
对于每个。不过请记住,addMarker()
需要在主应用程序线程上调用,一次执行其中的 100 个可能会冻结你的 UI.
关于信息的定制windows。你可以 look at the documentation here.
我继续做了一个简单的例子。
设置InfoWindowAdapter
的代码:
map.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
@Override
public View getInfoContents(Marker arg0) {
View v = getLayoutInflater().inflate(R.layout.customlayout, null);
TextView tLocation = (TextView) v.findViewById(R.id.location);
TextView tSnippet = (TextView) v.findViewById(R.id.population);
tLocation.setText(arg0.getTitle());
tSnippet.setText(arg0.getSnippet());
return v;
}
});
customlayout.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp"
android:orientation="vertical"
android:background="#000000">
<TextView
android:id="@+id/location"
android:textColor="#D3649F"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/population"
android:textColor="#D3649F"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
结果: