3

我正在尝试制作具有多个“屏幕”的游戏。如果用户走到屏幕边缘,应该会弹出一个动画,将当前屏幕移出并移入新屏幕。

我想用 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”,但这也无济于事。还是不可能在整个屏幕上滑动更大的位图?

屏幕截图 - 底部未绘制任何内容,右侧出现拖尾

4

0 回答 0