小编典典

如何使用 Android 地图 API v2 创建自定义形状的位图标记

all

我正在开发一个使用 Google Map API v2 的 Android 应用程序。我需要使用自定义标记在地图上显示用户位置。

每个标记都将显示来自 URL 的用户图片。图像必须以异步模式从服务器下载。有关示例,请参见随附的屏幕截图。

如何在标记中添加图像和自定义信息?

在此处输入图像描述


阅读 77

收藏
2022-07-31

共1个答案

小编典典

Google Maps API v2
Demo
中有一个MarkerDemoActivity类,您可以在其中看到自定义图像如何设置为 GoogleMap。

// Uses a custom icon.
mSydney = mMap.addMarker(new MarkerOptions()
    .position(SYDNEY)
    .title("Sydney")
    .snippet("Population: 4,627,300")
    .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)));

因为这只是将标记替换为您可能想要使用的图像Canvas来绘制更复杂和更花哨的东西:

Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bmp = Bitmap.createBitmap(80, 80, conf);
Canvas canvas1 = new Canvas(bmp);

// paint defines the text color, stroke width and size
Paint color = new Paint();
color.setTextSize(35);
color.setColor(Color.BLACK);

// modify canvas
canvas1.drawBitmap(BitmapFactory.decodeResource(getResources(),
    R.drawable.user_picture_image), 0,0, color);
canvas1.drawText("User Name!", 30, 40, color);

// add marker to Map
mMap.addMarker(new MarkerOptions()
    .position(USER_POSITION)
    .icon(BitmapDescriptorFactory.fromBitmap(bmp))
    // Specifies the anchor to be at a particular point in the marker image.
    .anchor(0.5f, 1));

这会将 Canvas 绘制canvas1GoogleMap mMap. 代码应该(大部分)不言自明,那里有很多教程如何绘制Canvas.
您可以从 Android 开发者页面中查看Canvas 和
Drawables开始。

现在您还想从 URL 下载图片。

URL url = new URL(user_image_url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();   
conn.setDoInput(true);   
conn.connect();     
InputStream is = conn.getInputStream();
bmImg = BitmapFactory.decodeStream(is);

必须
从后台线程下载图像(您可以使用AsyncTaskVolleyRxJava)。

之后,您可以将 替换为BitmapFactory.decodeResource(getResources(), R.drawable.user_picture_image)您下载的图像bmImg

2022-07-31