1

背景にアニメーション(短いビデオなど)を再現するライブ壁紙を開発しています。

さまざまなフルスクリーンサイズのビットマップを効率的にロードしてキャンバスに描画する方法を知っている人はいますか?私は2つのアプローチを試しましたが、どちらもあまり良くありません。


アプローチ#1:壁紙の起動時にすべてのビットマップをロードします。

問題:メモリ超過制限(約35MB)は、10ビットを超えるビット数をロードできません。そのため、アニメーションにはさまざまな画像がありません。


アプローチ#2:2ビットビットのみをロードします。実行時に、ビットマップをペイントし、古いビットマップを削除し、新しいビットマップをロードして、繰り返します。

問題:システムの多くを消費しますが(メモリではありませんが、一般的にOSの速度が低下します)、メモリ制限を超えないため、機能します。しかし、それでも、システム全体の速度が低下します。

例:

  Drawer.drawAll(res,c,p);
  res.removeOldBitmaps();
  res.loadNewBitmaps(wpservice,display);

私が考えた別のアプローチは、別のスレッドにリソースをロードすることです。皆さんはそれについてどう思いますか?他に解決策はありますか?

乾杯!

4

1 に答える 1

0

解決した、私が見つけた解決策は次のとおりでした:

実行時に1つずつ画像をロードします。

そして、このオプションを使用します。

/**Effective image decoder by chelin**/
public static Bitmap decodeResource(WallpaperService wpservice,int id){

    int scale=1;
    Resources res = wpservice.getResources();
    BitmapFactory.Options o2 = new BitmapFactory.Options();
    o2.inPreferredConfig = Bitmap.Config.ARGB_8888;
    o2.inSampleSize=scale;
    o2.inPurgeable = true;
    o2.inInputShareable = true;
    return BitmapFactory.decodeResource(res, id, o2);
}

それが私のために働いたようにそれが働くことを願っています。乾杯!

于 2013-01-19T15:35:46.533 に答える