我正在开发一个Android应用程序,使用的是谷歌 map API v2.我需要用自定义标记在 map 上显示用户位置.

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

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

在此处输入图像描述

推荐答案

Google Maps API v2 Demo中有一个MarkerDemoActivity类,你可以看到自定义图像是如何设置为谷歌 map 的.

// 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));

这会将画布canvas1绘制到画布GoogleMap mMap上.代码应该(主要)说明问题,有很多教程教你如何画Canvas.你可以从Android开发者页面上的Canvas and 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).

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

Android相关问答推荐

如何使用DeliveromManager.placeCall()删除已拨打的呼叫?

无法列出目录中的文件'

如何将子零部件的大小调整为可以调整大小的父组件大小?

当X为lambda函数时,如何避免Android Studio错误检测参数X未使用?

即使安装了Chrome和YouTube,Android对action_view a YouTube URL的意图也是空的

在命令行Android应用程序开发中苦苦挣扎

保护所有程序包文件和类

从未设置实时数据值

如何使用Jetpack Compose实现此底表?

为什么柱子的高度不都一样?

设置文本 colored颜色 动画时如何减少重新组合?

如何在Jetpack Compose中创建这个圆形?

更改活动(上下文)对接收到的uri的访问权限的影响?

Android Compose - 为什么 Canvas 中的drawText在底部被切断而不是在顶部?

了解 CoroutineScope(Job() + Dispatchers.Main) 语法

有没有办法让协程通道在接收时遵循特定的顺序而不是先进先出

通过 adb 解压并重新安装后 Android 应用程序崩溃

CoroutineScope 与挂起函数

Android Studio 复制类 kotlin

无法为:app@debug/compileClasspath解析依赖项com.github.dhaval2404:imagepicker-support:1.7.1