それぞれ最大 150 個の全画面表示、480x800、フレーム、圧縮 JPEG を含む複数のフレームごとのアニメーションを作成する必要があります。
AnimationDrawable は、最初の 10 フレーム程度で vm 予算を超えてハングします。
タイマーで新しいビットマップをロードする SurfaceView では、フレームレートがかなり遅くなり、おそらく 5 fps 未満になります。
私は OpenGL を初めて使用するので、私の状況で正しい方法であるかどうかを尋ねたかったのですか?
ありがとう!:)
編集:
jpgesの読み込み
ByteArrayOutputStream stream = new ByteArrayOutputStream();
BitmapFactory.decodeResource(getResources(), R.drawable.y1).compress(Bitmap.CompressFormat.JPEG, 80, stream);
byeArr.add( stream.toByteArray() );
ByteArrayOutputStream stream = new ByteArrayOutputStream();
BitmapFactory.decodeResource(getResources(), R.drawable.y2).compress(Bitmap.CompressFormat.JPEG, 80, stream);
byeArr.add( stream.toByteArray() );
... and so on.
と遊んで
@Override
public void onTick(long millisUntilFinished) {
if ( i < byeArr.size() )
{
bitMap = BitmapFactory.decodeByteArray ( byeArr.get(i) , 0, byeArr.get(i).length );
}
それでも、25 フレームの読み込みには約 3 ~ 5 秒かかります。多分それをスピードアップする方法はありますか?また、空きメモリの量、つまりロードできるフレーム数を確認する方法はありますか?
ありがとう
edit2: 実験的に、配列に約 350 フレームを保持できることがわかりました。これは、約 2 つの完全なアニメーションに非常に適しています。今は、decodeResource がちょっと遅いので、この画像をバイトとして保存し、ほぼリアルタイムで読み込めるようにする方法を見つける必要があります。
edit3: edit 2 では、配列に約 350 フレームを格納できることを確認しました。これは、1 つのアニメーションには十分です。
そのため、現在のアニメーションに必要なフレームをバイト配列にロードして、アニメーションを再生できます。
それでも問題は、フレームを
ByteArrayOutputStream stream = new ByteArrayOutputStream();
BitmapFactory.decodeResource(getResources(), R.drawable.y1).compress(Bitmap.CompressFormat.JPEG, 80, stream);
byeArr.add( stream.toByteArray() );
時間がかかりすぎます。だから私はそれをスピードアップする方法を見つける必要があります。おそらく、すでに jpeg をバイト配列として res または assets に保存する必要があると思いますが、どう思いますか?