要添加到地图标记的自定义图像

时间:2014-08-24 09:30:01

标签: android image google-maps

我'关于android的新手,我想要一些关于这件事的帮助。我有一个图像,其网址在我的在线服务器上。

例如

我的网址图片为:http:/example.com/image.png并存储在我的服务器中,我想将此图片添加到 this image中间的空白部分
enter image description here

我已经在地图内的标记上添加了上述链接的图像,但我无法弄清楚如何在空白部分内添加另一张图像。 我的代码片段是:

marker = map.addMarker(new MarkerOptions().position(position).title(title).snippet(snippetText)
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.custom_marker)));
  • R.drawable.custom_marker - >是上面链接中的图像。

有关如何做到这一点的任何帮助?有没有办法从我的网络服务器检索图像并添加此功能?

提前感谢。

1 个答案:

答案 0 :(得分:1)

要在绘图上绘制图像,首先需要获取图像。为此,您将需要使用AsyncTask,因为UI线程上禁止网络操作。

要在现有drawable之上绘制您(从服务器)收到的位图,您需要从中创建一个可变位图。

然后最后你可以在它上面绘制并使用结果作为你的标记的基础。

以下是一个例子:

class ImageTask extends AsyncTask<Void, Void, Bitmap> {
    @Override
    protected Bitmap doInBackground(Void... params) {
        // Get bitmap from server
        Bitmap overlay;
        try {
            URL url = new URL("http://www.quarktet.com/Icon-small.jpg");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            overlay = BitmapFactory.decodeStream(input);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        return overlay;     }

    protected void onPostExecute(Bitmap bitmap) {
        // If received bitmap successfully, draw it on our drawable
        if (bitmap != null) {
            Bitmap marker = BitmapFactory.decodeResource(getResources(), R.drawable.custom_marker);
            Bitmap newMarker = marker.copy(Bitmap.Config.ARGB_8888, true);
            Canvas canvas = new Canvas(newMarker);
            // Offset the drawing by 25x25
            canvas.drawBitmap(bitmap, 25, 25, null);
            // Add the new marker to the map
            mMap.addMarker(new MarkerOptions()
                    .position(position)
                    .title(title)
                    .snippet(snippetText)
                    .icon(BitmapDescriptorFactory.fromBitmap(newMarker)));
        }
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Init your map here

    new ImageTask().execute();
}