2017-03-05 3 views
0

Je reçois le lien d'image de l'API comme: « http://host/skin/images/answer_picture/image_1.png »Utiliser l'image drawable stockées dans l'application avec Gilde

Mais je veux utiliser les images directement depuis l'application, parce que beaucoup utilisateurs ont des problèmes pour charger les images .

J'ai donc ajouté les images à l'application et j'ai changé l'API pour obtenir seulement le nom de l'image "image_1.png".

L'ancien code était:

  View txtOption; 

      if (AppConstant.arQuestionList.get(questionid).getArAnswer().get(i).getAtype() 
        .equalsIgnoreCase("image")) { 
       txtOption = new ImageView(this); 

       try { 

         Glide.with(QuestionActivity.this).load(AppConstant.arQuestionList.get(questionid) 
          .getArAnswer().get(i).getAnswer()).override(60, 60).into((ImageView) 
          txtOption); 

       }catch (OutOfMemoryError e){ 
        e.printStackTrace(); 
       } 
       txtOption.setPadding(5, 5, 5, 5); 

      } else { 
       txtOption = new TextView(this); 

       ((TextView) txtOption).setText(AppConstant.arQuestionList.get(questionid) 
         .getArAnswer().get 
           (i).getAnswer()); 
       ((TextView) txtOption).setTextColor(getResources().getColor(R.color.answer_color)); 
       ((TextView) txtOption).setTypeface(tf, Typeface.BOLD); 
       ((TextView) txtOption).setGravity(Gravity.CENTER); 
       txtOption.setPadding(10, 20, 10, 20); 
      } 

Nouveau code (ne fonctionne pas):

    // get the img name example: Skill_test.png 
        String imgName = AppConstant.arQuestionList.get(questionid) 
          .getArAnswer().get(i).getAnswer(); 

        // delete image name extension 
        if (imgName.endsWith(".png")) { 
         imgName = imgName.substring(0, imgName.length() - 5); 
        } 

        String uri = "drawable/"+imgName; 


        int idDrawable = getResources().getIdentifier(uri,"drawable", getPackageName()); 

        Drawable drawable = ContextCompat.getDrawable(QuestionActivity.this, idDrawable); 

        Glide.with(QuestionActivity.this) 
          .load("") 
          .placeholder(drawable) 
          .into((ImageView)txtOption); 

Répondre

0

Enfin, je compris ce qui était l'erreur

    // get the img name, example: Skill_Hero_Skill-Name.png 
        String imgName = AppConstant.arQuestionList.get(questionid) 
          .getArAnswer().get(i).getAnswer(); 

        // delete image name extension 
        if (imgName.endsWith(".png")) { 
         imgName = imgName.substring(0, imgName.length() - 4); 
        } 

        // string to lowercase 
        imgName = imgName.toLowerCase(); 

        // replace "-" for "_" 
        imgName = imgName.replace('-','_'); 


        String uri = "drawable/"+imgName.toLowerCase(); 

        int imageResource = getResources().getIdentifier(uri,"drawable", getPackageName()); 


        Glide.with(QuestionActivity.this) 
          .load(imageResource) 
          .crossFade() 
          .override(60, 60) 
          .into((ImageView)txtOption); 
0

utiliser Just:

int idDrawable = getResources().getIdentifier(imgName, "drawable", getPackageName()); 

Drawable drawable = ContextCompat.getDrawable(context, idDrawable); 

Glide.with(context) 
     .load("") 
     .placeholder(drawable) 
     .into(imageView); 
+0

Désolé si la question est bête. getDrawable ne peut pas utiliser le contexte et imgName car ne peut pas lire une chaîne. Aussi .into (txtOption) dit "ne peut pas résoudre la méthode" en (androi.view.View) Je pense que je fais tout faux –

+0

Bien sûr, vous ne pouvez pas ajouter une image dans un TextView mais vous pouvez dans un ImageView.J'ai édité ma réponse – BenjaminBihr

+0

J'ai essayé avec le nouveau mais toujours pas workig, vérifiez ce que je fais dans la question principale. –