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

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

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

Ответ 1

В вашей деятельности должен быть метод getResources. У:

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

Ответ 2

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

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

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

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

Ответ 3

Метод 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);
}

Ответ 4

Я хотел бы добавить, что если вы получаете сообщение "устаревшее" при использовании 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.

Ответ 5

Если вы пытаетесь получить извлечение из представления, где установлено изображение,

ivshowing.setBackgroundResource(R.drawable.one);

то drawable вернет только нулевое значение со следующим кодом...

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

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

 ivshowing.setImageResource(R.drawable.one);

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