画像res/drawable/test.png
(R.drawable.test)があります。
このイメージをDrawable
を受け付ける関数に渡したいです。
(例:mButton.setCompoundDrawables())
それでは、画像リソースをDrawable
に変換する方法は?
あなたのアクティビティはメソッドgetResourcesを持つべきです。行う:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
このコードは非推奨です。
Drawable drawable = getResources().getDrawable( R.drawable.icon );
代わりにこれを使ってください。
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
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);
}
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の前後のバージョンで機能します。
画像が設定されているビューからドロウアブルを取得しようとしている場合、
ivshowing.setBackgroundResource(R.drawable.one);
その後、drawableは以下のコードでnull値のみを返します。
Drawable drawable = (Drawable) ivshowing.getDrawable();
そのため、特定のビューからドロウアブルを取得したい場合は、次のコードを使用して画像を設定することをお勧めします。
ivshowing.setImageResource(R.drawable.one);
そのとき初めて、drawableが正確に変換されます。
ベクトルかどうかにかかわらず、ベクトルリソースからDrawableを取得します。
AppCompatResources.getDrawable(context, R.drawable.icon);
注:ContextCompat.getDrawable(context, R.drawable.icon);
はベクトルリソースに対してAndroid.content.res.Resources$NotFoundException
を生成します。
あなたがフラグメントから継承しているならば、あなたはすることができます:
Drawable drawable = getActivity().getDrawable(R.drawable.icon)