如何在Android上进行逐帧动画?

时间:2012-07-30 03:53:07

标签: android animation mobile png

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

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

我已经尝试过SurfaceView,普通View,AnimationDrawable以及ImageView(用一个线程设置后台睡眠(33)[30fps]),但这些方法都没有比tom更好的帧速率坏CPU电话上的猫(如HTC Desire A)。

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

我认为独特的方式是加载一定数量的png,在SurfaceView上绘制,同时播放更多png并回收其他位图......

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

谢谢!

1 个答案:

答案 0 :(得分:0)

在这里你去试试...... :) 在ur values文件夹

上创建这样的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();        
           }
       }