我正在尝试制作具有多个“屏幕”的游戏。如果用户走到屏幕边缘,应该会弹出一个动画,将当前屏幕移出并移入新屏幕。
我想用 TranslateAnimation 来做到这一点。首先,我计算一个包含第一个和第二个屏幕的位图,然后我想在视图“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))在这个区域之外(所以在底部屏幕和右侧,因为第二帧应该移入)而不是显示位图的其余部分,没有绘制或只是涂抹(见截图)
为什么位图没有在动画中正确绘制?我错过了一些设置吗?我为视图组尝试了“wrap_content”,但这也无济于事。还是不可能在整个屏幕上滑动更大的位图?