将动画存储在静态字段中

时间:2011-06-18 18:42:13

标签: android animation

我正在寻找加快一些动画的方法。

我遇到this article,传递中提到在静态字段中存储大位图有助于应用程序加载时间(参见第4段)。

AnimationDrawable的等效技术是什么?

甚至可以在动画可绘制中预加载帧吗?它们是默认预装的吗?这会帮助我加快速度吗?

我正在运行一个由.png组成的帧动画,它是256x256,它们被缩小到图像视图的大小,我估计大约是100x100,当应用程序用于我的屏幕尺寸不同的设备,但是我的app的onCreate方法被调用后,这个100x100图像视图的大小不会改变。

解决方案:我按如下方式修改了接受的解决方案,以便我可以使用Android使用的标准动画格式(并且我已经编码了我的动画):

public Bitmap[] setAnimationArray(int res_anim){
        this.my_view.setBackgroundResource(res_anim); //view sized properly elsewhere
        AnimationDrawable t_anim = (AnimationDrawable) this.my_view.getBackground();
        Bitmap[] anim = new Bitmap[t_anim.getNumberOfFrames()];
        for(int i = 0;i<t_anim.getNumberOfFrames();i++){
            anim[i]=((BitmapDrawable) t_anim.getFrame(i)).getBitmap(); //extract bitmaps from the animation
        }
    return anim;

编辑:对于下面的答案,我想补充一点,手动表面视图中的动画似乎比使用标准方法动画要快得多。搜索Android SurfaceView以获取更多信息。

1 个答案:

答案 0 :(得分:0)

在arrays.xml中定义你的位图,如下所示:

    <array name="targetFrames">
        <item>@drawable/bitmap1</item>
        <item>@drawable/bitmap2</item>
        ...
   </array>

您可以执行以下操作来创建位图数组:

private void setupTargetFrames() {
        TypedArray targetResources = context.getResources().obtainTypedArray(R.array.targetFrames);
        targetFrames = new Bitmap[targetResources.length()];

        for (int i = 0; i < targetResources.length(); i++) {
            targetFrames[i] = BitmapFactory.decodeResource(context.getResources(), targetResources.getResourceId(i, R.drawable.defaulBitmap));
        }

        targetResources.recycle();
    }

然后在位图中循环播放动画。

如果要在加载位图时缩放位图,请参阅BitmapFactory的其他方法。