web-dev-qa-db-ja.com

リソースからDrawableを作成する方法

画像res/drawable/test.png(R.drawable.test)があります。
このイメージをDrawableを受け付ける関数に渡したいです。
(例:mButton.setCompoundDrawables())

それでは、画像リソースをDrawableに変換する方法は?

263
User7723337

あなたのアクティビティはメソッドgetResourcesを持つべきです。行う:

Drawable myIcon = getResources().getDrawable( R.drawable.icon );
538
Jems

このコードは非推奨です。

Drawable drawable = getResources().getDrawable( R.drawable.icon );

代わりにこれを使ってください。

Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
123

getDrawable (int id)メソッドは、API 22以降廃止されました。

代わりにあなたはAPI 21+のためにgetDrawable (int id, Resources.Theme theme)を使うべきです

コードはこのようになります。

Drawable myDrawable;
if(Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Lollipop){
    myDrawable = context.getResources().getDrawable(id, context.getTheme());
} else {
    myDrawable = context.getResources().getDrawable(id);
}
22
Chris Stillwell

GetDrawable(...)を使用しているときに "deprecated"というメッセージが表示される場合は、サポートライブラリの次のメソッドを使用してください。

ContextCompat.getDrawable(getContext(),R.drawable.[name])

このメソッドを使用するときは、getResources()を使用する必要はありません。

これは次のようにするのと同じです。

Drawable mDrawable;
if(Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Lollipop){
    mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]);
} else {
    mDrawable = getResources().getDrawable(R.id.[name]);
}

これは、Lollipopの前後のバージョンで機能します。

13
Sameer Khanal

画像が設定されているビューからドロウアブルを取得しようとしている場合、

ivshowing.setBackgroundResource(R.drawable.one);

その後、drawableは以下のコードでnull値のみを返します。

   Drawable drawable = (Drawable) ivshowing.getDrawable();

そのため、特定のビューからドロウアブルを取得したい場合は、次のコードを使用して画像を設定することをお勧めします。

 ivshowing.setImageResource(R.drawable.one);

そのとき初めて、drawableが正確に変換されます。

2
Exceptional

ベクトルかどうかにかかわらず、ベクトルリソースからDrawableを取得します。

AppCompatResources.getDrawable(context, R.drawable.icon);

注:
ContextCompat.getDrawable(context, R.drawable.icon);はベクトルリソースに対してAndroid.content.res.Resources$NotFoundExceptionを生成します。

2
Dhaval Patel

あなたがフラグメントから継承しているならば、あなたはすることができます:

Drawable drawable = getActivity().getDrawable(R.drawable.icon)

0
vorwerg-ni