Google map中StreetView和TrafficView中数据更新的问题(from Google)

来源:互联网 发布:化妆品淘宝店装修 编辑:程序博客网 时间:2024/05/05 18:37
问题10317:有关mapview 的setstreetview 和  settraffic 在更新的时候不能引起屏幕的显示
davemac327发布于:2010年8月9日
类mapview有两个方法用于设定街道试图(streetview)模式和地理视图(traffic)模式。它们分别是 setstreetview() 和 settraffic()。它们均能通过实例化的线程来从Google 服务器上获得数据。这些线程的速度都很快。但是呢,因为在mapview更新屏幕的时候,地图数据还没有到来,那么当你在执行这些方法的第一时间屏幕是没有变化的。那么mapview就应该在有新的数据从服务器发送但没有准备好变化(发生)之前是无效的。
对于所有的测试,在这些模式开启时在放大一个你喜欢的主要城市时,会得到streetview的蓝线和traffic线。(这段没理解清楚,估计有问题)
我附上了一个小的工程来演示这个问题。我用一个mapview和一些button来举例说明。按钮的基本回馈信号将设置合适的mapview模式并将它返回。我还尝试着在按钮的回馈中设置mapview.invalidate()和mapView.postInvalidate()但是它们并没有工作,因为直到按钮的回馈被返回后那些去取数据的线程依旧没有工作,在屏幕更新前并没有给数据任何时间去显示。(这段翻得也不好~)
在这个版本的回馈,我用了一个Handler,可以等三秒后再调用mapView.invalidate()。注意,Traffic模式并不用用三秒来调用,但是StreetView模式就需要了。有了这个合适的Handler,就可以依照你希望的三秒后去在屏幕上刷新StreetView的蓝线或者traffic的红线。如果你将这个Handler移除,显示的更新就没有那么合适了。注意:通常意义上如果你点击Street或者Traffic按钮两次的话就就能得到工作的信息(?没翻好)。这是因为在你第二次点击按钮的时候,数据就在这里等着去显示了。
你还可以发现,Traffic数据是被缓存起来的。没有这个Handler的话,当你第一次,第二次点击按钮后,你就可以在地图上看到traffic线,在当你正常点击的话,如你所愿,traffic线消失了。但你再次点击traffic按钮,traffic线又立刻在地图上显示了。那么这个是怎么实现的呢?因为在你第一次点击traffic按钮时那些旧的traffic数据已经被缓存起来了。如果你双击按钮的时候,那些traffic数据已经被改变了,那么你就看到那些线也变了。连续双击traffic按钮那么你就能看到当前的交通。现在等待几分钟让实时交通的改变。然后在几秒后的正常点击,traffic跟上??在traffic上第一次点击后你就可以看到当前这个traffic就是这么长时间的。第二次点击后,你可以看到新的traffic线,因为第二次点击是你看到的更新数据。(翻得更水了~)
表面上,StreetView数据并没有被缓存,因为你需要总是双击来看StreetView蓝线在地图上的显示。除非你用一些类似Handler来一段时间后更新地图。

在setStreetView 或者 setTraffic 打开并且当数据从服务器得到后,mapView就需要立刻更新了。开发者不需要落实这种机制去猜什么时候数据到达去更新地图的显示。


原文地址:http://code.google.com/p/android/issues/detail?id=10317

原创粉丝点击