如何检查是否谷歌地图信息窗口更新前仍然显示?(How to check if an Google M

2019-08-03 14:54发布

我开始是显示信息窗口内的位置图像的InfoWindowAdapter工作。 我有很多不同的位置,因此有可能的位置图像不可用在手机上,并从网上下载。

现在的地图API声明如下:

请注意,返回的视图的快照将采取然后渲染的地图,以便后续的观点变化将不会在地图上的信息窗口中反映出来的。 要更新信息窗口(例如图像加载后),只需调用showInfoWindow()和视图将被更新。

据我了解这一点,我需要跟踪创建,我想更新,一旦加载图像调用showInfoWindow信息窗口的标记。 我有一个ImageDownloadService,将采取如果图像完成加载所通知的处理程序。

如果图像需要一点时间装载有可能是用户打开另一个信息窗口或关闭滚动离开当前窗口。 问题是,当时我再次呼吁showInfoWindow上的标记,以更新的观点,我不能肯定的是,信息窗口仍然显示。

有没有办法只更新是否仍显示其信息窗口?

Answer 1:

我刚刚一直有类似的问题AsyncTask小号下载和更新的InfoWindow ,我想出了这个小变通方法,应该有希望服务于您的需求,直到谷歌解决这一个出来后,今天早上多敲我的头撞在墙上。

我打电话marker.showInfoWindow()OnPostExecute()我的方法AsyncTask ,从而重新叫InfoWindowAdapter方法,这是在一个循环结束了,从来没有正确地传播我的变化。

我用的解决方案是存储当前选择的标记和InfoWindow查看我想要显示。 我打发以下其中一个例子TextView正在更新的DownloadBubbleInfo AsyncTask (类似图像线程我相信)。

            // Setting a custom info window adapter for the google map
        gMap.setInfoWindowAdapter(new InfoWindowAdapter() {

            // Use default InfoWindow frame
            public View getInfoWindow(Marker arg0) {
                return null;
            }

            // Defines the contents of the InfoWindow
            public View getInfoContents(Marker arg0) {
                if (selectedMarker.isInfoWindowShown()) {
                    return infoWindowView;
                } else {
                    // Getting view from the layout file info_window_layout
                    infoWindowView = getLayoutInflater().inflate(
                            R.layout.bubblewindowlayout, null);
                    // Stash the base view in infoWindowView
                    // Getting reference to the TextView to set latitude
                    TextView tvTit = (TextView) infoWindowView
                            .findViewById(R.id.tv_title);
                    tvTit.setText("Fetching data...");

                    // Async the update so we're not slowed down waiting for
                    // the
                    // bubble to populate
                    new DownloadBubbleInfo(context, infoWindowView, arg0)
                            .execute(arg0.getTitle(), arg0.getSnippet());

                    // Returning the view containing InfoWindow contents
                    return infoWindowView;
                }
            }
        });
        gMap.setOnMarkerClickListener(new OnMarkerClickListener() {

            public boolean onMarkerClick(Marker marker) {
                // When a marker is clicked set it as the selected marker so
                // we can track it for the InfoWindow adapter. This will
                // make sure that the correct marker is still displayed when
                // the callback from DownloadBubbleInfo is made to
                // marker.showInfoWindow() which is needed to update the
                // InfoWindow view.
                selectedMarker = marker;
                infoWindowView = null;
                return false;
            }
        });

而从相关的行DownloadBubbleInfo AsyncTask

    @Override
protected String[] doInBackground(String... queryparts) {
    // Do the query and stash the results in queryResults and pass to
    // onPostExecute to attach to the mainview (the current view from the
    // main code) and then call showInfoWindow on the marker to re-launch
    // the InfoWindowAdapter methods again to repopulate the InfoWindow view
    // and attach it.
    return queryResults;
}
protected void onPostExecute(String[] results) {
    ((TextView) mainview.findViewById(R.id.tv_title)).setText(results[0]);
    ((TextView) mainview.findViewById(R.id.tv_info)).setText(results[1]);

    marker.showInfoWindow();
    Log.i("Chris-Debug", "Reshowing InfoWindow");
}

现在,这一切都应该确保正确的标记被填充了你返回正确的信息AsyncTask和变戏法的Android API极其尴尬的GoogleMaps V2的另一个角落成功绕行!



Answer 2:

可能标记的布尔isInfoWindowShown()方法是你在找什么?

标记#isInfoWindowShown() -谷歌地图API的Android V2文档

当信息窗口已滚动远离它不能有所帮助,但是,对于这一点,我想,你可能必须转换标记的经纬度坐标,屏幕坐标或用它来检查标记是否仍然在屏幕上:

如何获得纬度/经度跨度在谷歌地图V2为Android

我不知道是否有可能在所有检查窗口本身仍然在地图视图范围或没有。



文章来源: How to check if an Google Maps InfoWindow is still displayed before updating it?