Eu tenho uma imagem res/drawable/test.png
(R.drawable.test).
Quero passar esta imagem para uma função que aceite Drawable
, por exemplo mButton.setCompoundDrawables()
.
Então, como posso converter um recurso de imagem em um Drawable
?
Eu tenho uma imagem res/drawable/test.png
(R.drawable.test).
Quero passar esta imagem para uma função que aceite Drawable
, por exemplo mButton.setCompoundDrawables()
.
Então, como posso converter um recurso de imagem em um Drawable
?
Respostas:
Sua atividade deve ter o método getResources. Faz:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
Este código está obsoleto:
Drawable drawable = getResources().getDrawable( R.drawable.icon );
Use isto:
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);
(onde o terceiro parâmetro é uma instância opcional do Tema).
O getDrawable (int id)
método está depreciado a partir da API 22.
Em vez disso, você deve usar o getDrawable (int id, Resources.Theme theme)
API 21+
Código seria algo parecido com isto.
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)
Gostaria apenas de acrescentar que, se você estiver recebendo a mensagem "obsoleta" ao usar o getDrawable (...), use o seguinte método da biblioteca de suporte.
ContextCompat.getDrawable(getContext(),R.drawable.[name])
Você não precisa usar getResources () ao usar esse método.
Isso é equivalente a fazer 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]);
}
Isso funciona nas versões pré e pós-pirulito.
Obtenha Drawable a partir de recursos vetoriais, independentemente de seu vetor ou não:
AppCompatResources.getDrawable(context, R.drawable.icon);
Nota:
ContextCompat.getDrawable(context, R.drawable.icon);
produzirá android.content.res.Resources$NotFoundException
para recurso vetorial.
Se você estiver tentando obter o desenho da vista em que a imagem está definida como,
ivshowing.setBackgroundResource(R.drawable.one);
o drawable retornará apenas valor nulo com o seguinte código ...
Drawable drawable = (Drawable) ivshowing.getDrawable();
Portanto, é melhor definir a imagem com o código a seguir, se você quiser recuperar o desenho de uma exibição específica.
ivshowing.setImageResource(R.drawable.one);
somente então o drawable será convertido exatamente.
Se você está herdando de um fragmento, pode fazer:
Drawable drawable = getActivity().getDrawable(R.drawable.icon)