Как создать Drawable из ресурса

У меня есть res/drawable/test.png (R.drawable.test).
Я хочу передать это изображение функции, которая принимает Drawable .
(Например, mButton.setCompoundDrawables ())

Итак, как конвертировать ресурс изображения в Drawable ?

Solutions Collecting From Web of "Как создать Drawable из ресурса"

Ваша деятельность должна иметь метод getResources. Делать:

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

Этот код устарел.

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

Используйте этот instad.

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

Метод getDrawable (int id) обесценивается как API 22.

Вместо этого вы должны использовать getDrawable (int id, Resources.Theme theme) для API 21+

Код будет выглядеть примерно так.

 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 (…), вы должны использовать следующий метод из библиотеки поддержки.

 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 вернет только нулевое значение со следующим кодом …

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

Таким образом, лучше установить изображение с помощью следующего кода, если вы хотите получить извлечение из определенного вида.

  ivshowing.setImageResource(R.drawable.one); 

Только тогда мы будем точно преобразовывать.