如何在android中制作随机帧动画?

时间:2013-05-09 08:58:13

标签: android animation random frame

我有一些动画图像(帧),如image_1,image_2和image_3.我想在我的应用程序中使用此动画图像,所以我试过

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >

    <item
        android:drawable="@drawable/image_1"
        android:duration="2000"/>
    <item
        android:drawable="@drawable/image_2"
        android:duration="50"/>
     <item
        android:drawable="@drawable/image_3"
        android:duration="50"/>

</animation-list>

并将其设置为我的布局背景

 public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if(hasFocus){

        final AnimationDrawable bgDrawable = (AnimationDrawable) ((LinearLayout) findViewById(R.id.animationLayout))
                .getBackground();
        ((LinearLayout) findViewById(R.id.animationLayout))
                .post(new Runnable() {

                    @Override
                    public void run() {
                        bgDrawable .start();
                    }
                });

        }
    }
}

但这表明动画每次都以相同的顺序重复。我想通过使用这些图像来制作random frame animation。我该怎么做?

先谢谢

1 个答案:

答案 0 :(得分:4)

您可以创建新的AnimationDrawable,而不是将XML绑定到它,只需手动创建框架并将其添加到AnimationDrawable

AnimationDrawable animationDrawable = new AnimationDrawable();

animationDrawable.addFrame("You BitmapDrawable for first frame", 2000);
animationDrawable.addFrame("You BitmapDrawable for second frame", 50);
animationDrawable.addFrame("You BitmapDrawable for third frame", 50);

有一个很好的教程:

<强>更新

您可以使用重置AnimationDrawable的功能,并在特定时间随机填写。这只是一个伪代码,因此请根据您的需要使用正确的语法进行调整:

public AnimationDrawable shuffleFrame(AnimationDrawable ad) {

    ad = null;
    ad = new AnimationDrawable();

    // Create your Drawable frames here
    ...

    // For each Drawable, pick a random one here and add the frame
    ...
    ad.addFrame(Randomly picked frame, duration);


    return ad;
}

每次要移动帧时都要调用此函数。