複数の「画面」でゲームを作ろうとしています。ユーザーが画面の端に移動すると、現在の画面をシフトアウトして新しい画面にシフトするアニメーションが表示されます。
これを TranslateAnimation でやりたかったのです。まず、最初の画面と 2 番目の画面を含むビットマップを計算し、ビュー 'transitionView' でこれを再生し、最初の画面が含まれていたビュー 'levelView' を非表示にします。トランジションが終了したら、もう一度「transitionView」を非表示にして、「levelView」に新しい画面を表示したい。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewGroup"
android:layout_width="match_parent"
android:layout_height="match_parent">
<view
class="at.test.game.ScreenTransitionTest2$LevelView"
android:id="@+id/levelView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<view
class="at.test.game.ScreenTransitionTest2$TransitionView"
android:id="@+id/transitionView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"/>
</RelativeLayout>
最初に ImageView で試してみましたが、使用した設定に関係なく、常にビットマップが縮小されます。そこで、(0, 0) から画像を描画する独自のビューを作成しました。クリッピングが発生したため、onCreate メソッドで無効にしました。
((RelativeLayout)findViewById(R.id.viewGroup)).setClipChildren(false);
アニメーションは次のようになります。
this.transitionView.setBitmap(calculateBitmap(screen1, screen2));
TranslateAnimation a = new TranslateAnimation(
Animation.ABSOLUTE, startx, Animation.ABSOLUTE, endx,
Animation.ABSOLUTE, starty, Animation.ABSOLUTE, endy);
a.setDuration(3000);
a.setFillAfter(true);
this.transitionView.setAnimation(a);
a.start();
私の問題: ビットマップの 480x800 のみが正しくレンダリング/移動されます (ビットマップは約 1000x880 で、その開始座標は (-40、-40)、終了座標 (-520、-40) のようです) この領域の外側 (下部) 2番目のフレームが移動する必要があるため、画面の右側に移動します)ビットマップの残りの部分を表示する代わりに、何も描画されないか、単ににじみます(スクリーンショットを参照)
アニメーションでビットマップが正しく描画されないのはなぜですか? いくつかの設定を見逃しましたか?ビューグループに「wrap_content」を試しましたが、それも役に立ちませんでした。それとも、画面全体に大きなビットマップをスライドさせることができないのでしょうか?