Tengo una imagen res/drawable/test.png
(R.drawable.test).
Quiero pasar esta imagen a una función que acepte Drawable
, por ejemplo mButton.setCompoundDrawables()
.
Entonces, ¿cómo puedo convertir un recurso de imagen en a Drawable
?
Tengo una imagen res/drawable/test.png
(R.drawable.test).
Quiero pasar esta imagen a una función que acepte Drawable
, por ejemplo mButton.setCompoundDrawables()
.
Entonces, ¿cómo puedo convertir un recurso de imagen en a Drawable
?
Respuestas:
Su actividad debe tener el método getResources. Hacer:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
Este código está en desuso:
Drawable drawable = getResources().getDrawable( R.drawable.icon );
Use esto en su lugar:
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);
(donde el tercer parámetro es una instancia de Tema opcional).
El getDrawable (int id)
método se deprecia a partir de la API 22.
En su lugar, debe usar la getDrawable (int id, Resources.Theme theme)
API 21+
El código se vería así.
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);
}
getResources().getDrawable(R.drawable.ic_warning_80dp, context?.theme)
Solo me gustaría agregar que si recibe un mensaje "obsoleto" cuando usa getDrawable (...), debe usar el siguiente método de la biblioteca de soporte.
ContextCompat.getDrawable(getContext(),R.drawable.[name])
No tiene que usar getResources () cuando usa este método.
Esto es equivalente a hacer algo como
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]);
}
Esto funciona en versiones anteriores y posteriores a Lollipop.
Obtenga Drawable de un recurso vectorial independientemente de si es vector o no:
AppCompatResources.getDrawable(context, R.drawable.icon);
Nota:
ContextCompat.getDrawable(context, R.drawable.icon);
producirá android.content.res.Resources$NotFoundException
para el recurso vectorial.
Si está intentando obtener el dibujable desde la vista donde se establece la imagen como,
ivshowing.setBackgroundResource(R.drawable.one);
entonces el sorteo devolverá solo un valor nulo con el siguiente código ...
Drawable drawable = (Drawable) ivshowing.getDrawable();
Por lo tanto, es mejor configurar la imagen con el siguiente código, si desea recuperar el dibujo de una vista en particular.
ivshowing.setImageResource(R.drawable.one);
solo entonces el dibujable convertiremos exactamente.
Si está heredando de un fragmento, puede hacer:
Drawable drawable = getActivity().getDrawable(R.drawable.icon)