42フレームで構成された大きなスプライトシート(3808x1632)があります。これらのフレームを使用してアニメーションを表示し、スレッドを使用してすべてのフレームを含むビットマップ配列をロードし、スプラッシュ画面が終了するのを待ちます。私はSurfaceView(およびキャンバスの描画機能)を使用していません。メインレイアウトのImageViewにフレームごとにロードするだけです。私のアプローチは、スプライトシートから多数の画像をロードするのと似ています 。完了には実際には約15秒かかりますが、受け入れられません。
私はこの種の関数を使用します:
for (int i=0; i<TotalFramesTeapotBG; i++) {
xStartTeapotBG = (i % framesInRowsTeapotBG) * frameWidthTeapotBG;
yStartTeapotBG = (i / framesInRowsTeapotBG) * frameHeightTeapotBG;
mVectorTeapotBG.add(Bitmap.createBitmap(framesBitmapTeapotBG, xStartTeapotBG, yStartTeapotBG, frameWidthTeapotBG, frameHeightTeapotBG));
}
frameBitmapTeapotBGは大きなスプライトシートです。もっと深く見てみると、おそらくスプライトシートが大きすぎるために、createBitmap関数に時間がかかることをlogcatで読みました。rect関数とcanvasを使用して、配列にロードする小さなビットマップを作成して、大きなスプライトシートにウィンドウを作成できる場所を見つけましたが、実際には明確ではありませんでした。私はその投稿について話している:ビットマップの一部を切り取る
私の質問は、スプライトシートのカットをどのように高速化できるかということです。
編集:私はこのアプローチを使おうとしていますが、最終的なアニメーションを見ることができません:
for (int i=0; i<TotalFramesTeapotBG; i++) {
xStartTeapotBG = (i % framesInRowsTeapotBG) * frameWidthTeapotBG;
yStartTeapotBG = (i / framesInRowsTeapotBG) * frameHeightTeapotBG;
Bitmap bmFrame = Bitmap.createBitmap(frameWidthTeapotBG, frameHeightTeapotBG, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmFrame);
Rect src = new Rect(xStartTeapotBG, yStartTeapotBG, frameWidthTeapotBG, frameHeightTeapotBG);
Rect dst = new Rect(0, 0, frameWidthTeapotBG, frameHeightTeapotBG);
c.drawBitmap(framesBitmapTeapotBG, src, dst, null);
mVectorTeapotBG.add(bmFrame);
}
おそらく、ビットマップbmFrameが正しく管理されていません。