web-dev-qa-db-fra.com

Android - Comment afficher des images à partir de ressources imprimables?

Je ne parviens pas à afficher une image enregistrée dans un dossier res/drawable. J'utilise ImageGetter pour faire cela. Le code est ci-dessous:

ImageGetter imageGetter3 = new ImageGetter() {                
    public Drawable getDrawable(String source) { 
        int id=0; 
        if (source.equals("smiley")) { 
            id = R.drawable.smiley; 
        } 
        Drawable d = getResources().getDrawable(id); 
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); 
        return d; 
    } 
};

directions += "Je bent bij lokaal " + vertrek.getNaam() + "\n" 
           + "Sta met je rug voor de deur\n" 
           + Html.fromHtml("<img src=\"smiley\">", imageGetter3, null) + " Draai naar links\n";

Ce que je vois à l'écran lors de l'exécution est un petit carré avec le texte "obj" dessus. Alors qu'est-ce qui ne va pas? L'image ne peut pas être lue ou autre chose? Comment afficher des images?

Honnêtement, j'ai beaucoup cherché sur Google et essayé d'autres méthodes d'ImageGetter également, mais aucune d'entre elles ne semble fonctionner, j'ai aussi essayé ces méthodes, elles ne fonctionnent pas:

ImageGetter imageGetter2 = new ImageGetter() { 
 public Drawable getDrawable(String source) { 
      Drawable d = null; 
      d = Drawable.createFromPath(source); 
      d.setBounds(0,0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); 
      return d; 
 } 
};

ImageGetter imageGetter = new ImageGetter() {                
 public Drawable getDrawable(String source) { 
     Drawable drawFromPath; 
     int path = Route.this.getResources().getIdentifier(source, "drawable","com.prj56.tracingapp"); 
     drawFromPath = (Drawable) Route.this.getResources().getDrawable(path); 
     drawFromPath.setBounds(0, 0, drawFromPath.getIntrinsicWidth(), drawFromPath.getIntrinsicHeight()); 
     return drawFromPath; 
 } 
};  

=============================================== ======= if (....) {ImageView iv1 = new ImageView (this); iv1.setImageResource (R.drawable.smiley);

    directions += "Je bent bij lokaal " + vertrek.getNaam() + "\n" 
       + "Sta met je rug voor de deur\n";
       HERE COMES THE IMAGE! BUT HOW TO DO THIS? It's within directions textview...
    directions += " Draai naar links\n";

}
8
Yanny

Mise à jour du 12 décembre 2016

getResources (). getDrawable () étant obsolète dans api 22, vous devriez maintenant utiliser ContextCompat.getDrawable, par exemple.

Drawable d = ContextCompat.getDrawable(context, R.drawable.smiley);

Dans votre activité, vous pouvez appeler ceci pour obtenir votre ressource Drawable en tant qu’objet Drawable.

Drawable d = getResources().getDrawable(R.drawable.smiley);

Si vous voulez montrer votre dessin dans un ImageView, vous pouvez faire ceci:

ImageView i = new ImageView(this);
i.setImageResource(R.drawable.smiley);

ou dans votre fichier xml

<ImageView   
  Android:layout_width="wrap_content"
  Android:layout_height="wrap_content"
  Android:src="@drawable/smiley"/>
30
Damian

Vous pouvez obtenir l'image à l'aide de pImg.Selon la position de l'adaptateur, obtenez la chaîne correspondant au nom de l'image. L'image doit être présente dans le dossier pouvant être dessiné.

ImageView prodImg=(ImageView)view.findViewById(R.id.img_proj_name);
    String pImg=prod.get(position);
    int resID = view.getResources().getIdentifier("@drawable/"+pImg , "drawable", parentView.getContext().getPackageName());
    prodImg.setImageResource(resID);
6
CoderDecoder

Un moyen très simple de le montrer consiste à l'écrire dans votre widget ImageView dans votre fichier XML:

Android:background="@drawable/your_file_name"

... et assurez-vous que vous avez mis ce fichier image (png ou jpg, etc.) dans votre dossier pouvant être dessiné. Lorsque vous écrivez your_file_name, vous n'avez besoin que du titre, pas de l'extension de fichier.

Je préfère cette façon plutôt que d’écrire par programme dans votre fichier .Java (comme indiqué avec les autres réponses ci-dessus), parce que votre xml vous montrera l’image en aperçu, ne le fera pas par programme, mais simplement l’emplacement réservé ImageView.

1
Azurespot

Manière la plus simple - Peut être considérer le code ci-dessous

Nous pouvons tirer parti d’Imageview setImageResource, reportez-vous au code ci-dessous pour le même principe.

image_1.png, image_2.png, etc.

int resId = getResources().getIdentifier("image_" + imagePosition, "drawable", getPackageName());
             imageview.setImageResource(resId);
0
Lakshmanan