移动MapFragment(SurfaceView)会导致黑色背景闪烁

Mic*_*ł K 53 android surfaceview android-maps mapfragment android-maps-v2

我正在尝试实施新的Android Google Maps API(v2).然而,它与SlidingMenu似乎并不顺利.如您所知,MapFragment实施基于SurfaceView.问题是SurfaceView它不喜欢移动它 - 我的意思是把它放在可移动的视图中:

移动它时,它会在其像素最初放置的位置留下黑洞.它看起来像这样.

通过在其上指定透明背景SurfaceView或者甚至在其上放置透明可以部分地解决该问题View.我只是无法想象,如果只是对我来说结果是不可接受的,或者我有一个不同的问题,使它看起来如何.

要查看它的外观,请观看此视频.

(对不起质量,但无论如何都可以轻松看到问题)

当打开时拉开正常的列表视图(橙色屏幕)时SlidingMenu,动画很流畅.但是一MapFragment出现,地图上就会出现一些奇怪的刷新/闪烁/同步问题.

在HTC One S和三星Galaxy ACE上测试过.


我解决它的超级疯狂的想法:每次开始动画开始时,截取MapFragment(应该可以使用SurfaceView)并在动画期间将其放置.但我真的不知道该怎么做...... 拍摄地图的截图是不可能的,但也许有人会从中受到启发.

或者也许禁用以其他方式重绘地图,我不知道.


更新:

发现了这个.

看起来SurfaceView可以更改为TextureView以消除这些限制.但由于MapFragment基于SurfaceView,我不知道它是否可以实现.

另一个更新 似乎此问题已在4.1+设备上得到解决.他们只使用了TextureView.但在较低版本中,我们仍然需要使用变通方法.

Dan*_*ler 14

当然,正确的解决方案是谷歌解决问题(请参阅Android Maps V2问题4639:http://code.google.com/p/gmaps-api-issues/issues/detail? id = 4639 ).

但是,我的一位同事建议只是将地图扩展到其容器之外.如果我们将地图片段扩展到其容器的可见区域之外,如下所示:

android:layout_marginLeft="-40dp"
android:layout_marginRight="-40dp"
Run Code Online (Sandbox Code Playgroud)

我们可以减少/消除闪烁.较新的设备(例如Galaxy Nexus)在此次黑客攻击后没有显示闪烁,旧设备(例如LG Optimus V)显示闪烁减少.我们必须扩展两边的边距,以便信息窗口在被选中时居中.


更新:这个问题已于8月28日由谷歌修复,但我猜它仍然需要进入版本.


Rya*_*yan 4

这是一个疯狂的想法,不要移动 MapView ;-)

也就是说,在 FrameLayout 中的应用程序后面创建一个全屏宽度的 MapView。然后将视图放在顶部,并在需要显示 MapView 的位置打一个孔。移动时,您需要更新地图位置以保持同步,以便用户不断看到地图的同一部分,但这应该比移动表面视图更好。

  • 这很有趣,但实现起来很糟糕,特别是在视图页面或需要多个 MapFragments 并且每个显示不同地图的地方。而“SlidingMenu”将整个“上方”视图移到一边,因此这意味着我必须完全改变库的工作方式。否则,非常有趣,所以+1:) (6认同)