Android: MapFragment在动画中不移动

4

我有一个视图,其中包含一个MapFragment

我的mainViewPanel看起来像这样

<LinearLayout
android:id="@+id/main_view_panel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:orientation="horizontal">

<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.5"
class="com.google.android.gms.maps.SupportMapFragment"
map:cameraTargetLat="40.72"
map:cameraTargetLng="-74.00"
map:cameraZoom="8"/>

</LinearLayout>

我的翻译代码如下所示。
TranslateAnimation anim = new TranslateAnimation(0, 500, 0, 0);
anim.setFillAfter(true);
anim.setDuration(250);
mainViewPanel.startAnimation(anim);

视图的其余部分进行了动画,但地图保持不变。就像主视图窗口在移动,我可以看到地图右侧更多的内容,但地图本身并没有视觉上的移动。其他视图(如TextView)的动画正常工作。


2
这可能是因为地图是基于SurfaceView的,它具有与常规小部件不同的特性。显然,有方法可以翻译地图,例如ViewPager可以实现,但我怀疑它没有使用TranslateAnimation,即使对于普通小部件来说,这也很笨拙,更不用说SurfaceView了。 - CommonsWare
1
我遇到了完全相同的问题。如果不使用TranslateAnimation,你会如何实现它的动画效果? - Goddchen
对于旧版本的Android,我没有使用动画,只是做了类似于mapWrapperView.setPadding(offsetWidth, 0, -offsetWidth, 0);这样的操作。 - Drew LeSueur
2个回答

3

这适用于较新版本的安卓系统。

mainViewPanel.animate().translationX(500);

0

这是因为新的地图 API 是使用 SurfaceView 创建的,因此动画不可行。

我找到的一个临时补丁是:在 MapFragment 上使用任何透明视图。因此,如果您对 MapFragment 进行动画处理,它将随之动画,并且此时地图将不可见。

例如:

<RelativeLayout
android:id="@+id/main_view_panel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.5"
class="com.google.android.gms.maps.SupportMapFragment"
map:cameraTargetLat="40.72"
map:cameraTargetLng="-74.00"
map:cameraZoom="8"/>

 <ImageView
            android:id="@+id/map_overlay"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#00000000" />

</RelativeLayout>

试试这个。它应该可以工作。

注意:当您动画视图时,可能需要更改其可见性。 如果您想在动画后显示地图,则必须隐藏覆盖视图,并在要开始动画时取消隐藏覆盖视图。但是,您必须确保隐藏/取消隐藏过程仅在动画完成后才会执行。

动画步骤:

  • 在开始动画之前,取消隐藏覆盖视图
  • 动画完成后,即经过一段时间后,隐藏覆盖视图

这对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接