我无法将Google Places API提供的图标添加到标记中。例如,我想从Google Places API的JSON中返回图标:
"icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png"
以下是我现在如何在不添加图标的情况下执行此操作:
for (Place place : mNearPlaces.results) {
LatLng placeLatLng = new LatLng(place.geometry.location.lat,
map.addMarker(new MarkerOptions()
.position(placeLatLng)
.title(place.name));
}
我查看了this post,答案建议使用一些AsyncTask来下载图像。有没有其他方法可以做到这一点(这种方式似乎很慢)?是否有标准方法来设置Google Places API提供的标记图像?
以下是Google Maps Android API v2 Documentation for Markers
由于
答案 0 :(得分:3)
您可以使用图书馆帮助您查看网址中的图片。访问{strong> Android-Universal-Image-Loader
的https://github.com/nostra13/Android-Universal-Image-Loader您也可以访问以了解下载图片
http://brainflush.wordpress.com/2009/11/23/droid-fu-part-2-webimageview-and-webgalleryadapter/
之后
对于自定义标记图标,您可以使用图标显示为标记。从任何类型的支持来源加载图标。
fromAsset(String assetName) - 从资源文件夹
加载fromBitmap(位图图片) - 加载位图图像
fromFile(String path) - 从文件
加载fromResource(int resourceId) - 从可绘制资源加载
尝试如下
// latitude and longitude
double latitude = 17.385044;
double longitude = 78.486671;
// create marker
MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Hello Maps");
// Changing marker icon
// set yours icon here
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.my_marker_icon)));
// adding marker
googleMap.addMarker(marker);
答案 1 :(得分:3)
您可以使用以下代码将网址图片加载到GoogleMap mapMarker。首先设置其他属性,如标题,片段,位置等....
mapMarker= mGoogleMap.addMarker(new MarkerOptions()
.title(Integer.toString(total_steps))
.snippet("Steps")
.position(new LatLng(current_lat,current_longi)));
mapMarker.setTag("current_position");
mapMarker.showInfoWindow();
loadMarkerIcon(mapMarker);
使用自定义方法加载图标属性的图像。您可以将Glide gradle链接添加到项目中。
private void loadMarkerIcon(final Marker marker) {
String burlImg = "Url_imagePath;
Glide.with(this).load(burlImg)
.asBitmap().fitCenter().into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {
if(bitmap!=null){
// Bitmap circularBitmap = getRoundedCornerBitmap(bitmap, 150);
Bitmap mBitmap = getCircularBitmap(bitmap);
mBitmap = addBorderToCircularBitmap(mBitmap, 2, Color.WHITE,squareBitmapWidth);
BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(mBitmap);
marker.setIcon(icon);
}
}
});
}
答案 2 :(得分:1)
有很多库可以帮助您查看来自网址的图片,例如:URLImageViewhelper遗憾的是,您无法在没有AsyncTask
的情况下从网址加载图片,但是所有图书馆都可以帮助您查看网址中的图片正在使用Asynctask
所以只需要调用该函数。
库类的实现在github页面中可用。
答案 3 :(得分:0)
调用.icon()时会执行以下操作
protected Marker createMarker(double latitude, double longitude, String title, String snippet, String imageUrl) {
MarkerOptions markerOptions = new MarkerOptions();
return googleMap.addMarker(markerOptions
.position(new LatLng(latitude, longitude))
.anchor(0.5f, 0.5f)
.title(title)
.snippet(snippet)
.icon(BitmapDescriptorFactory.fromBitmap(getBitmapFromLink(imageUrl))));
}
此方法会将图片网址转换为位图
public Bitmap getBitmapFromLink(String link) {
try {
URL url = new URL(link);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
try {
connection.connect();
} catch (Exception e) {
Log.v("asfwqeds", e.getMessage());
}
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (IOException e) {
Log.v("asfwqeds", e.getMessage());
e.printStackTrace();
return null;
}
}
现在,在connection.connect()中将发生异常,显示android.os.NetworkOnMainThreadException。要处理此异常,请在您创建或添加标记之前在您的代码中添加此代码
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}