いくつかの実験の後、私はついに私の解決策を思いつきました。ただし、希望する効果を完全に得るには、アニメーションを微調整する必要があります。最初にaを使用するLayerDrawable
ことを検討しました。これは、z軸に従って画像を相互に位置合わせするためです。しかし、一度に1つのレイヤーだけをアニメーション化する方法を思い付くことができませんでした。だから、私の問題を解決するために私は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は元の場所に再表示されます。アニメーションが完了したら、他のimageviewの上に)。
最後に、必要なのは、imageviewsの画像を設定し、必要に応じてアニメーションを開始することだけです。
imageOne.setImageDrawable(getResources().getDrawable(R.drawable.YOUR_DRAWABLE_ONE);
imageTwo.setImageDrawable(getResources().getDrawable(R.drawable.YOUR_DRAWABLE_TWO);
imageOne.startAnimation(slideOutRight);
これが、同じ問題に直面する可能性のある他の人にとって役立つことを願っています。