0

我正在尝试找出如何以良好的帧速率进行 png 逐帧动画...

我有一堆 png(可能是 1500 个 png 姿势),我需要一个接一个地播放它们(就像一个会说话的应用程序,以汤姆猫为例)

我已经尝试过 SurfaceView、普通视图、AnimationDrawable 和 ImageView(使用一个线程设置背景与睡眠(33)[for a 30fps]),但是与坏的汤姆猫相比,这些方法都没有一个好的帧速率CPU 手机(如 HTC Desire A)。

还好说我已经添加了 Options 来为图像设置 in SampleSize,以防它需要更多内存或处理速度。

我认为独特的方法是加载大量的 pngs ,在 SurfaceView 上绘制,并在播放时加载更多的 pngs 并回收其他位图......

任何人都可以帮助我吗?至少有一些代码?

谢谢!

4

1 回答 1

0

给你...试试这个... :) 在你的值文件夹中创建一个这样的 XML 文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="frames">
    <item>@drawable/pak1_1</item>
    <item>@drawable/pak1_2</item>
    <item>@drawable/pak1_3</item>
    <item>@drawable/pak1_4</item>
    <item>@drawable/pak1_5</item>
</array>
</resources>

现在试试这段代码:

public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main);
           Resources res = getResources();
           TypedArray FrameImages = res.obtainTypedArray(R.array.frames);
           animation = new AnimationDrawable();
           for (int i = 0; i < 1500; i++) {
               Drawable drawable = FrameImages.getDrawable(i);
               animation.addFrame(drawable, 33);
           }
           animation.setOneShot(false);
           ImageView imageAnim =  (ImageView) findViewById(R.id.img);
           imageAnim.setBackgroundDrawable(animation);
           // run the start() method later on the UI thread
           imageAnim.post(new Starter());
       }

       class Starter implements Runnable {
           public void run() {
               animation.start();        
           }
       }
于 2012-07-30T04:07:41.833 回答