2011-01-27 14 views
228

イメージはres/drawable/test.png(R.drawable.test)です。
Drawableを受け取る関数にこの画像を渡したいと思います。
(例:mButton.setCompoundDrawables())リソースから描画可能作成方法

画像リソースをDrawableに変換するにはどうすればよいですか?

答えて

492

アクティビティにはgetResourcesメソッドが必要です。あなたがイメージは以下のように設定されているビューから引き出し可能を取得しようとしている場合は、

Drawable myIcon = getResources().getDrawable(R.drawable.icon); 
+0

たとえば、マニフェストに何か他のものを追加する必要がありますか? onCreateにこのコード行だけの空のプロジェクトを作成し、Resources $ NotFoundExceptionを取得します。このプロジェクトには、hdpi、ldpi、およびmdpiマップのicon.pngが付属していました。 – Vincent

+1

これがアクティビティクラスの外にある場合は、getResources()が存在するContextに到達するための別の方法を見つける必要があります。 [この回答はコンストラクタに渡すことをお勧めします](http://stackoverflow.com/a/6214567/404960) – rymo

+34

APIバージョン21では、このメソッドは非推奨であるため、次のように置き換えてください。 Drawable drawable = ResourcesCompat.getDrawable (getResources()、page)。getImageId()、null); – Boren

0

ivshowing.setBackgroundResource(R.drawable.one); 

を、次に描画可能で、次のコードでのみNULL値を返します...

:やります
Drawable drawable = (Drawable) ivshowing.getDrawable(); 

したがって、特定のビューから描画可能オブジェクトを取得する場合は、次のコードでイメージを設定することをお勧めします。

ivshowing.setImageResource(R.drawable.one); 

その後、drawableは変換されます。

20

getDrawable (int id)方法は、代わりにあなたはコードが次のようになりますAPI 21+

ためgetDrawable (int id, Resources.Theme theme)を使用する必要があります22

APIのよう減価償却されます。

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); 
} 
+0

なぜAPIごとにnullを渡さないのですか?プラス:ヌルが最善の選択肢だと確信していますか? – jonathanrz

+1

getDrawable(int id、Resources.Themeテーマ)は、API 21まで来ませんでした。 – ChrisStillwell

98

このコードは推奨されていません。

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

このinstadを使用してください。

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

これは、指定されたコンテキストからテーマが適用されることに注意してください。テーマを使用しないようにするには、 'ResourcesCompat.getDrawable(getResources()、R.drawable.icon、null);'(3番目のパラメータはオプションのThemeインスタンス)を使用します。 – vaughandroid

9

私はちょうどgetDrawable(...)を使用しているときに、「非推奨」のメッセージを取得している場合は、代わりにサポートライブラリから次のメソッドを使用する必要があることを追加したいと思います。

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]); 
} 

のようなものをやってと同じです。

関連する問題