2011-02-08 8 views
3

現在、TimerとCanvas.onDraw()/canvas.drawBitmapを使用して、SurfaceViewのフルスクリーンで1つのフレームアニメーションを表示しています。すべてのフレームは480x320ピクセルの解像度を持ち、描画時に画面の解像度に引き伸ばされます。これは、より速いデバイスでも静かに動作し、最大15fpsのフレームレートを実現します。アニメーションが高いフレームレートで表示されるので、アニメーションが開始する前に、すべてのフレーム(アニメーションはループする30の単一フレームで構成されています)をロードする必要があるという問題があります。通常16 MBのAndroidプロセスのための小さなヒープスペースが与えられると、私のテストデバイスのほとんどは30フレームすべてをメモリにプリロードすることができないので、代わりにOpenGLを使用することを考えています。 OpenGLを読むと、16MBのプロセスヒープスペース内でメモリが考慮されず、OpenGLを使用することもできます。AndroidでOpenGLを使用してフルスクリーンの単一フレームアニメーションを描画していますか?

私の質問は次のとおりです:OpenGLは、フレームレートを15fpsにするのに十分速く、テクスチャ(私の単一フレーム)を変更して表示するのに十分速いでしょうか?私はテクスチャの交換があまりにも頻繁にOpenGLを大幅に遅くすると言う記事を読んでいます。あなたはそれについて何か経験がありましたか? 15fpsの全画面テクスチャをスワップすることが実現できないと言うことができるのであれば、OpenGLを実行するのに時間を費やしたくありません。

編集:私は今のOpenGLを使用せずに、デフォルトのAndroid NDKを使用する技術を使用しています

。私のanswer hereを見てください。

+0

テクスチャはフレームごとに1回しか変更されません。それほど頻繁ではありません。 – Alan

+0

これは間違った問題を解決しようとしているように聞こえます。なぜ、メモリ内に非圧縮フルスクリーンビットマップが必要ですか? PC上の.aviに30フレームを構築することができない理由があれば、それを.apkのアセットとして組み込み、それをMediaPlayerで再生するだけです。 –

+0

アニメーションはオーバーレイとして表示されるため、透明でなければなりません。残念ながら映画は透明ではありません。 –

答えて

2

OpenGLのパフォーマンスは、使用するデバイスによって異なります。しかし、15fpsで30個のテクスチャだけを表示することは、ほとんどのデバイスで問題になることはありません。

this articleを見て、AndroidでOpenGLを開始してください。ループアニメーションを実現するのは簡単です。

幸運を祈る!

+0

ロッキーありがとう、私はOpenGLに乗り始めます。私はテクスチャを描く方法を見つけなければならないでしょう。既にテクスチャのサイズは2の累乗でなければならないことを既に読んでいます。現時点ではそうではありませんので、私はそれにも対処しなければなりません。 –

0

私の場合はOpenGLを使用する必要はありません。使用可能なスペースを超えずに30フレームをロードできるからです。 garbage collectorの実行中に、30フレームの読み込み中に占有されていたメモリが解放されていることが判明しました。

for (int i=0; i < 30; i++) { 
    Bitmap b = "load480x320BitmapFromResources(i)"; 
    frames.add(b); 
} 

この前のコードは、ヒープスペースを超えてしまいました。ループ内に行を追加すると、すべてのリソースがロードされます。私が自分でオブジェクトを作成したわけではありませんが、Androidフレームワークの一部の内部ビットマップ読み込みコードはそうでした。

See also a more detailed description of this solution

関連する問題