Android结果动画

时间:2015-04-08 13:24:07

标签: android animation

我想为游戏创建下一个动画:
首先,图像从正常尺寸缩小到几乎为零,
而不是将当前图像更改为" flash"位图(bitm)。
而不是使用新的位图(bitm)执行第二个动画 目前我可以分别使用这两个动画, 但不能随意使用它们。 如何等到第一个动画结束,然后才改变位图并执行第二个动画? 或者还有另一种更好的方法吗?

这是我的代码:

public class MainActivity extends Activity implements AnimationListener {

    ImageView im;
    Button btnStart;
    Bitmap bitm;
    Animation zoomOut, flash;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnStart = (Button) findViewById(R.id.btn_start);
        im = (ImageView) findViewById(R.id.stopwatch);
        //flash bitmap 
        bitm = BitmapFactory.decodeResource(getResources(), R.drawable.flash);

        // loading the animation
        zoomOut = AnimationUtils.loadAnimation(getApplicationContext(),
                R.anim.zoom_out);
        flash =  AnimationUtils.loadAnimation(getApplicationContext(),
                R.anim.flash);

        // setting animation listeners
        zoomOut.setAnimationListener(this);
        flash.setAnimationListener(this);

        btnStart.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                im.setVisibility(View.VISIBLE);
                // TODO: How to wait until this animation is finished ???
                im.startAnimation(zoomOut);
                // and only then change bitmap and perform second animation??
                im.setImageBitmap(bitm);
                im.startAnimation(flash);

            }
        });
    }

这是我的动画: 缩小:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

    <scale
        android:duration="500"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.1"
        android:toYScale="0.1" >
    </scale>

</set>

闪光灯:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

    <scale
        android:duration="200"
        android:fromXScale="0"
        android:fromYScale="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:startOffset="500"
        android:toXScale="1"
        android:toYScale="1" >
    </scale>
    <scale
        android:duration="200"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:startOffset="700"
        android:toXScale="0"
        android:toYScale="0" >
    </scale>

</set>

1 个答案:

答案 0 :(得分:0)

你的类正在实现AnimationListener并且你要设置两个动画来使用它,这有点奇怪;也许你正在那里做其他事情...我建议为每一个添加单独的监听器。然后在onAnimationEnd中,添加位图更改并在那里开始下一个动画,这样它将等到第一个动画结束。

zoomOut.setAnimationListener(new AnimationListener(){
    @Override
    public void onAnimationEnd(Animation animation) {
        //put the code to do the bitmap change
        //start the next animation here
    }
    @Override
    public void onAnimationRepeat(Animation animation) {
    }
    @Override
    public void onAnimationStart(Animation animation) {
    }
});