如上图,我想滑出LayoutA
一个谷歌地图SupportMapFragment
,在里面显示一些设置LayoutB
我translationX()
在 LayoutA 上实现了这一点,它只在 API11+ 中工作。但是,我在 API10 中找到了一个解决方法TranslationAnimation
,但是在动画运行时地图本身是隐藏的。MapFragement
currentPosition 和 ZoomIn/ZoomOut 的按钮按预期显示,但地图本身隐藏在 的开头TranslationAnimation
,如果动画结束,则再次显示。
这是 Fragment 的布局(地图在相对布局内,我改变了相对布局的位置)
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
//LAYOUT B
<RelativeLayout
android:id="@+id/back_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
//LAYOUT A
<RelativeLayout
android:id="@+id/front_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent" >
<fragment
android:id="@+id/map_screen"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/map_screen_bottom_bar"
class="com.google.android.gms.maps.SupportMapFragment">
</fragment>
还有我的动画
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB_MR1) {
((RelativeLayout) findViewById(R.id.front_frame)).animate()
.translationX(-1 * mScreenWidth);
} else {
TranslateAnimation slideOut = new TranslateAnimation(0, -1
* mScreenWidth, 0, 0);
slideOut.setDuration(getResources().getInteger(
R.integer.animation_transistion_length_short));
slideOut.setFillEnabled(true);
//slideOut.setFillAfter(true);
slideOut.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation) {
RelativeLayout mView = (RelativeLayout) findViewById(R.id.front_frame);
int[] pos = { mView.getLeft() - mScreenWidth,
mView.getTop(), mView.getRight(),
mView.getBottom() };
mView.layout(pos[0], pos[1], pos[2], pos[3]);
}
});
((RelativeLayout) findViewById(R.id.front_frame))
.startAnimation(slideOut);
}
这是一张糟糕的照片,在动画期间拍摄。位置和缩放按钮是动画的。如果动画结束,地图本身不会显示,但会出现。有人有什么想法吗?