【问题标题】:How to put an image inside GoogleMaps api snippet如何将图像放入 GoogleMaps api 片段
【发布时间】:2017-11-14 00:16:15
【问题描述】:

我想插入一个带有图像的 sn-p,每当有人单击标记时,他们都会在标记描述 (sn-p) 中看到位图图像。

  mSydney = mMap.addMarker(new MarkerOptions()
            .position(SYDNEY)
            .title("test")
            .snippet(IMAGE HERE)
            .icon();

我有一个带有图片的 URL,我该怎么做?

【问题讨论】:

标签: java android image google-maps-markers google-maps-android-api-2


【解决方案1】:
fromAsset(String assetName) – Loading from assets folder
fromBitmap (Bitmap image) – Loading bitmap image
fromFile (String path) – Loading from file
fromResource (int resourceId) – Loading from drawable resource

// create marker
MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Hello Maps");

// Changing marker icon
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.my_marker_icon)));

// adding marker
googleMap.addMarker(marker);

【讨论】:

  • 这是如何更改标记的图标,我问如何将图像从URL放到标记sn-p。
  • URL url = new URL("imageURL"); 位图 bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); googleMap.addMarker(bmp);
【解决方案2】:

我使用Picasso进行图片加载

这是用于膨胀自定义信息窗口的 java 代码

googleMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
        @Override
        public View getInfoWindow(final Marker marker) {
            v[0] = getActivity().getLayoutInflater().inflate(R.layout.map_info_design, null);
            if (marker != null) {

                final ImageView logo=(ImageView)v[0].findViewById(R.id.logo);




                t1=new Target() {
                    @Override
                    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                        logo.setImageBitmap(bitmap);

                    }

                    @Override
                    public void onBitmapFailed(Drawable errorDrawable) {

                    }

                    @Override
                    public void onPrepareLoad(Drawable placeHolderDrawable) {

                    }
                };
                Picasso.with(getActivity())
                        .load(b1.get(Integer.parseInt(marker.getSnippet()))).error(R.drawable.logo_icon)
                        .into(logo,new MarkerCallback(marker));

            }
            return (v[0]);
        }

        @Override
        public View getInfoContents(Marker marker) {


            return null;
        }
    });

布局 XML 文件 (R.layout.custom_marker_maps)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:background="@drawable/comment_icon"
android:padding="10dp"
android:layout_height="wrap_content">

<ImageView
    android:layout_width="60dp"
    android:layout_marginLeft="10dp"
    android:layout_marginStart="10dp"
    android:layout_centerInParent="true"
    android:layout_height="60dp"
    android:id="@+id/logo"/>

</RelativeLayout>

为回调添加此代码(解决 Picasso 错误)

static class MarkerCallback implements Callback {
    Marker marker=null;

    MarkerCallback(Marker marker) {
        this.marker=marker;
    }

    @Override
    public void onError() {
        Log.e(getClass().getSimpleName(), "Error loading thumbnail!");
    }

    @Override
    public void onSuccess() {
        if (marker != null && marker.isInfoWindowShown()) {
            marker.hideInfoWindow();
            marker.showInfoWindow();
        }
    }
}

输出

【讨论】:

  • 谢谢,不过好像你只是更改了marker的图标,我问的是点击marker后的小窗口(Info Window),如何加载图片到那里?
  • 您需要制作自定义信息窗口(编辑我的答案)
  • 我该怎么做?当你按下标记时如何让它出现?
  • 在第一个代码框中 b1 来自哪里??我从第一个盒子代码中得到了很多错误......(我实现了毕加索)
  • @drdisrespect 图像数组列表(我的代码的一部分)
猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多