Android - 大于屏幕尺寸的翻译视图会导致拖尾

时间:2012-05-20 14:40:32

标签: android animation bitmap translation clipping

我正在尝试用几个“屏幕”制作游戏。如果用户进入屏幕边缘,则应弹出一个动画,移出当前屏幕并切换到新屏幕。

我想用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,但无论使用何种设置,它都会缩小位图。所以我现在创建了自己的View,它只是从(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),endcoordinates(-520,-40))在屏幕的底部和右侧,因为第二帧应移动)而不是显示位图的其余部分没有绘制或只是涂抹(见屏幕截图)

为什么动画中没有正确绘制位图?我错过了一些设置吗?我为viewgroup尝试了'wrap_content',但这也没有帮助。或者是不可能在整个屏幕上滑动更大的位图?

screenshot - nothing is drawn on bottom and smearing occurs on the right

0 个答案:

没有答案