9

パラメーターなしのBitmapDrawableコンストラクターは廃止されたため、コンストラクターにリソース ID を指定する必要があります。

BitmapDrawable bitmapDrawable = new BitmapDrawable(res, bmap);

res一般的に はどこにありますかgetResources()

一般的な画像キャッシュを使用している場合、コンストラクターはなぜそれを必要とし、どのようにその値を定義できるのでしょうか?

4

3 に答える 3

3

このコンストラクターでは、「リソースの表示メトリックに基づいて初期ターゲット密度を設定するために」 getResources() が必要です。このように理解しています。サイズ、密度、フォントのスケーリングに関する情報を含む表示メトリックを取得し、この情報をコンストラクターに渡します。おそらく、res/フォルダー画像にさまざまなサイズの画像がある場合-のような適切なサブフォルダーにあるdrawable-ldpi場合drawable-hdpi-異なる情報が得られます。

画像キャッシュで使用するには、コンテキストを渡してから、次のように呼び出す必要がありContext ctx; ctx.getResources(); ます。

于 2015-02-17T09:05:37.163 に答える
0

非推奨のコンストラクタと新しいコンストラクタについて

BitmapDrawable(Resources res) /* deprecated constructor */

BitmapDrawable(android.content.res.Resources, android.graphics.Bitmap) /* new constructor they introduced to replace above deprecated constructor */

非推奨のコンストラクターは、密度を処理せずに空のドローアブルを作成します。ただし、新しいコンストラクターはビットマップからドローアブルを作成し、リソースの表示メトリックに基づいて初期ターゲット密度を設定します。新しいコンストラクターを使用すると、Bitmap (最終クラス) で使用できるすべての機能が得られます。https://developer.android.com/reference/android/graphics/Bitmap.html#pubmethods

コンストラクター経由で Bitmap 変数を渡さないとどうなりますか? パラメータから変数を渡す場合、渡した場所に新しいビットマップ変数を作成する必要はありません。ビットマップの参照 (静的参照) を行う別の変数を作成しました。ビットマップは大きなサイズのファイルであるため、参照を渡すと、ImageView 内でビットマップをロードするために使用しなければならなかった多くのスペースと処理能力を節約できます。取得しないのに役立ちますOutOfMemory Exception

例えば、

public void passA(String); /* method signature*/
String s = "dfsfsdf";
passA(s); /* method calling */

別の側面:

public void passA(String newVar) {
   /* newVar simply points (references) to the memory of "dfsfsdf". */
   /* passing references */ /* for Bitmap creating new copy is expensive 
    operations */
/*Note: Java does manipulate objects by reference, and all object variables are references */
}

Bitmap 変数 (android.graphics.Bitmap) を渡したもう 1 つのアイデアは、Bitmap が Parcelable であるためです (Parcelable を実装している場合)。パーセル可能なオブジェクトは Bundle に含めることができます。また、バンドルは、IPCS (プロセス間通信) の中核となるものであり、さまざまな Android コンポーネントを介した通信です)。

一般的な画像キャッシュについては、 新しいコンストラクターを介して変数に渡されたビットマップから、必要なすべての密度とその他のものをセットアップします。次に、構成済みを指すようLeast Recently Used (Lru)に文字列を定義するキャッシュにHashMap を作成できます。たとえば、LruCache。これで、プロセッサの最も古いキャッシュで、ビットマップが構成されました。これにより、多くの処理能力が節約されます。keyBitmap variable

https://developer.android.com/reference/android/util/LruCache.html

私の答えがあなたを助けてくれることを願っています!

于 2017-07-31T16:45:57.673 に答える