web-dev-qa-db-fra.com

Comment créer Drawable from resource

J'ai une image res/drawable/test.png (R.drawable.test).
Je souhaite transmettre cette image à une fonction qui accepte Drawable.
(par exemple, mButton.setCompoundDrawables ())

Alors, comment convertir une ressource image en un fichier Drawable?

269
User7723337

Votre activité devrait avoir la méthode getResources. Faire:

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

Ce code est obsolète:

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

Utilisez ceci à la place:

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

La méthode getDrawable (int id) est amortie à partir de l'API 22.

À la place, vous devez utiliser la getDrawable (int id, Resources.Theme theme) pour API 21+.

Le code ressemblerait à quelque chose comme ça.

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);
}
22
Chris Stillwell

Je voudrais juste ajouter que si vous obtenez un message "obsolète" lorsque vous utilisez getDrawable (...), vous devez utiliser la méthode suivante à partir de la bibliothèque de support.

ContextCompat.getDrawable(getContext(),R.drawable.[name])

Vous n'êtes pas obligé d'utiliser getResources () lorsque vous utilisez cette méthode.

Cela équivaut à faire quelque chose comme

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

Cela fonctionne sur les versions pré et post Lollipop.

13
Sameer Khanal

Get Drawable à partir d'une ressource vectorielle, que ce soit son vecteur ou non:

AppCompatResources.getDrawable(context, R.drawable.icon);

Note:
ContextCompat.getDrawable(context, R.drawable.icon); produira Android.content.res.Resources$NotFoundException pour la ressource vectorielle.

3
Dhaval Patel

Si vous essayez d’obtenir le dessin de la vue où l’image est définie,

ivshowing.setBackgroundResource(R.drawable.one);

alors le drawable retournera seulement la valeur null avec le code suivant ...

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

Il est donc préférable de définir l'image avec le code suivant, si vous souhaitez récupérer le dessin d'une vue particulière.

 ivshowing.setImageResource(R.drawable.one);

alors seulement le dessinable sera converti exactement.

2
Exceptional

Si vous héritez d'un fragment, vous pouvez faire:

Drawable drawable = getActivity().getDrawable(R.drawable.icon)

0
vorwerg-ni