在地图信息窗口V2动态内容(Dynamic contents in Maps V2 InfoWind

2019-07-22 00:34发布

我想显示在一个地图V2片段标记信息窗口。 事情是,我想表明,被动态地从与网页加载的位图的通用图像下载 。

这是我的InfoWindowAdapter:

class MyInfoWindowAdapter implements InfoWindowAdapter {

    private final View v;

    MyInfoWindowAdapter() {
        v = getLayoutInflater().inflate(R.layout.infowindow_map,
                null);
    }

    @Override
    public View getInfoContents(Marker marker) {



        Item i = items.get(marker.getId());

        TextView tv1 = (TextView) v.findViewById(R.id.textView1);
        ImageView iv = (ImageView) v.findViewById(R.id.imageView1);
        tv1.setText(i.getTitle());


        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .delayBeforeLoading(5000).build();

        imageLoader.getMemoryCache(); 

        imageLoader.displayImage(i.getThumbnailUrl(), iv, options,
                new ImageLoadingListener() {

                    @Override
                    public void onLoadingStarted(String imageUri, View view) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onLoadingFailed(String imageUri, View view,
                            FailReason failReason) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onLoadingComplete(String imageUri,
                            View view, Bitmap loadedImage) {
                        Log.d("MAP", "Image loaded " + imageUri);

                    }

                    @Override
                    public void onLoadingCancelled(String imageUri,
                            View view) {
                        // TODO Auto-generated method stub

                    }
    });

        return v;
    }

    @Override
    public View getInfoWindow(Marker marker) {
        // TODO Auto-generated method stub
        return null;
    }

}

我有2个问题是:

正如我们知道的InfoWindow绘制后来到它的变化(在我的情况下,新BitMapImageView不显示)/的InfoWindow不被更新。 我怎么能当“通知”信息窗口重新加载自身imageLoader结束? 当我把

marker.showInfoWindow()

onLoadingComplete它创造了一个无限循环标记所在的会弹出,开始加载图像,弹出自己打扮等。

我的第二个问题是一个缓慢的网络连接(与5000毫秒的模拟代码中的延迟),该ImageViewInfoWindow会一直显示上次加载的图像,无论如果图像属于该ImageWindow / Marker

如何propperly任何建议实现这一点?

Answer 1:

你应该做Marker.showInfoWindow()在当前显示当您收到模型更新信息窗口标记。

所以,你需要做3两件事:

  1. 创建模型,而不是把所有的下载到InfoWindowAdapter
  2. 保存参考标记(称之为markerShowingInfoWindow
    getInfoContents(Marker marker)
  3. 当模型会通知您下载完整的呼叫的
if (markerShowingInfoWindow != null && markerShowingInfoWindow.isInfoWindowShown()) {
    markerShowingInfoWindow.showInfoWindow();
}


Answer 2:

我做了类似的事情。 这仍然给我的错误衰退

if (markerShowingInfoWindow != null && markerShowingInfoWindow.isShowingInfoWindow()) {
    markerShowingInfoWindow.showInfoWindow();
}

所以我所做的就是直接关闭窗口,然后再次打开它

if (markerShowingInfoWindow != null && markerShowingInfoWindow.isShowingInfoWindow()) {

    markerShowingInfoWindow.hideInfoWindow();
    markerShowingInfoWindow.showInfoWindow();

}

对于相同的答案的一个更好的细节版本,这里是我原来的soultion LINK



Answer 3:

我使用的代码在这篇文章中,和它的工作好。

http://androidfreakers.blogspot.de/2013/08/display-custom-info-window-with.html



Answer 4:

我也面临同样的情况,并使用下面的代码解决。

在我的适配器我已经添加公共变量

public class MarkerInfoWindowAdapter implements GoogleMap.InfoWindowAdapter {

    public String ShopName="";   

    -------
    -------

     @Override
    public View getInfoWindow(Marker arg0) {

         View v;
         v = mInflater.inflate(R.layout.info_window, null);

         TextView shop= (TextView) v.findViewById(R.id.tv_shop);

         shop.setText(ShopName);


    }
}

在我的主要活动添加MarkerClickListener

----

MarkerInfoWindowAdapter mMarkerInfoWindowAdapter;

----
----

@Override
public void onMapReady(GoogleMap googleMap) {


    mMarkerInfoWindowAdapter = new MarkerInfoWindowAdapter(getApplicationContext());



    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

        @Override
        public boolean onMarkerClick(final Marker arg0) {

            mMarkerInfoWindowAdapter.ShopName= "my dynamic text";

            arg0.showInfoWindow();

            return true;
        }
    }

    mMap.setInfoWindowAdapter(mMarkerInfoWindowAdapter);


}


文章来源: Dynamic contents in Maps V2 InfoWindow