经过一番试验,我终于想出了我的解决方案。不过,我仍然需要调整动画以获得完整的预期效果。我首先考虑使用 a LayerDrawable
,因为这会根据 z 轴将图像相互对齐。但是,我无法想出一种方法来一次只为一个图层设置动画。所以,为了解决我的问题,我使用了FrameLayout.
FrameLayouts 非常适合在 z 轴上进行排序(它们按照您在 XML 中放置的顺序相互叠加)。但是,当尝试将视图放置在屏幕的特定区域时,它们会变得复杂。首先,我制作了我的布局 XML:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/image_below"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/image_above"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
然后,当然,在Activity
我设置内容视图并声明和实例化 imageview 对象:
setContentView(R.layout.game_layout);
ImageView imageOne = (ImageView)findViewById(R.id.image_above);
ImageView imageTwo = (ImageView)findViewById(R.id.image_below);
然后,我创建了动画:
Animation slideOutRight = AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right);
现在动画已创建,我为其设置了一个AnimationListener
。这样我就可以知道动画何时完成:
slideOutRight.setAnimationListener(new AnimationListener(){
@Override
public void onAnimationEnd(Animation arg0) {
imageTwo.bringToFront();
}
@Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
}
});
如果您在上面的代码中注意到我放置的 onAnimationEnd 方法中的方法,imageTwo.bringToFront();
那么当顶部的 imageview 滑出屏幕时,它将不再可见(如果我不使用该方法,顶部的 imageview 将重新出现在其原来的位置,在另一个图像视图上,一旦它的动画完成)。
最后,剩下要做的就是设置 imageviews 的图像并在需要时启动动画:
imageOne.setImageDrawable(getResources().getDrawable(R.drawable.YOUR_DRAWABLE_ONE);
imageTwo.setImageDrawable(getResources().getDrawable(R.drawable.YOUR_DRAWABLE_TWO);
imageOne.startAnimation(slideOutRight);
我希望这对可能面临同样问题的其他人有用。