0

良いフレームレートでpngフレームごとのアニメーションを行う方法を見つけようとしています...

たくさんの png (おそらく 1500 の png ポーズ) があり、それらを 1 つずつ再生する必要があります (話すアプリのように、例としてトム キャットを取り上げます)。

私はすでにSurfaceView、通常のView、AnimationDrawable、およびImageView(sleep(33)[30fpsの場合]で背景を設定するスレッドを使用)を試しましたが、これらの方法のどれもが悪いトムキャットと比較して良好なフレームレートを作りませんでしたCPU フォン (HTC Desire A など)。

また、より多くのメモリまたは処理速度が必要な場合に備えて、画像の SampleSize を設定するためのオプションを既に追加していると言うのも良いことです。

ユニークな方法は、大量のpngをロードし、SurfaceViewに描画し、再生中にさらにpngをロードして他のビットマップをリサイクルすることだと思います...

誰でもそれで私を助けることができますか?少なくともいくつかのコードで?

ありがとう!

4

1 に答える 1

0

どうぞ... これを試してください... :) ur値フォルダにこのような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 に答える