web-dev-qa-db-fra.com

Comment vérifier quelle ressource d'image actuelle est liée à ImageView dans Android xml?

Je veux vérifier quelle ressource image est attachée à ImageView dans le fichier xml, je suis en mesure de vérifier quelle ressource image est attachée à la vue d'image mais mon exigence est de savoir comment vérifier que le ImageView a la même ressource que celle que j'ai définie dans xml non, sur cette base, je dois effectuer certaines actions. Le code exécute toujours une autre partie. Voici mon code,

  if (regProfile.getDrawable() == getResources().getDrawable( R.drawable.ivpic)) 
    {
      Toast.makeText(_con, "Image is ivPic", Toast.LENGTH_LONG).show(); 
      // new RegisterAsyntaskNew().execute(); 
    } 
  else 
    {
     Toast.makeText(_con, "Image isn't ivPic", Toast.LENGTH_LONG).show(); 
     // new RegisterAsyntask().execute(); 
    }
21
Reena

Salut s'il vous plaît avoir un essai avec ceci comme suit

if (regProfile.getDrawable().getConstantState() == getResources().getDrawable( R.drawable.ivpic).getConstantState()) 
{
  Toast.makeText(_con, "Image is ivPic", Toast.LENGTH_LONG).show(); 
  // new RegisterAsyntaskNew().execute(); 
} 
else 
{
 Toast.makeText(_con, "Image isn't ivPic", Toast.LENGTH_LONG).show(); 
 // new RegisterAsyntask().execute(); 
}

veuillez utiliser .getConstantState() pour comparer

visite 

http://developer.Android.com/reference/Android/graphics/drawable/Drawable.html

http://developer.Android.com/reference/Android/graphics/drawable/Drawable.ConstantState.html

MODIFIER:

.getResources().getDrawable(imageResource)

Est obsolète dans API21, j'ai donc changé la réponse de Jitesh Upadhyay.

Voici le code:

@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
public static boolean checkImageResource(Context ctx, ImageView imageView,
        int imageResource) {
    boolean result = false;

    if (ctx != null && imageView != null && imageView.getDrawable() != null) {
        ConstantState constantState;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
            constantState = ctx.getResources()
                    .getDrawable(imageResource, ctx.getTheme())
                    .getConstantState();
        } else {
            constantState = ctx.getResources().getDrawable(imageResource)
                    .getConstantState();
        }

        if (imageView.getDrawable().getConstantState() == constantState) {
            result = true;
        }
    }

    return result;
}
57
Jitesh Upadhyay

Vous pouvez faire quelque chose comme suivre,

Définissez une tag par XML ou dynamiquement selon vos besoins.

À travers xml,

<ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:id="@+id/imageview1" 
        Android:background="@drawable/bg"
        Android:tag="bg"/>

Dynamiquement,

ImageView imageView=(ImageView)findViewById(R.id.imageview1);
imageView.setTag("bg");

Utilisez imageView.getTag() pour récupérer les informations sur l'image.

String backgroundImageName = String.valueOf(imageView.getTag()); 

Modifier:

si vous changez fréquemment ImageView fond, alors,

imageView.setTag(R.drawable.drawablename);
imageView.setImageResource(R.drawable.drawablename);
String backgroundImageName = String.valueOf(imageView.getTag());

Maintenant, vous pouvez faire votre chèque.

if (backgroundImageName.equals("bg"))  // here "bg" is the tag that you set previously
    {
      Toast.makeText(_con, "Image is ivPic", Toast.LENGTH_LONG).show(); 
      // new RegisterAsyntaskNew().execute(); 
    } 
  else 
    {
     Toast.makeText(_con, "Image isn't ivPic", Toast.LENGTH_LONG).show(); 
     // new RegisterAsyntask().execute(); 
    }
15
Spring Breaker

tu peux faire comme ça. d'abord, vous devez définir la propriété tag de imageview comme ceci

 Android:tag="ic_grade_grey_24dp"

if (viewHolder.imgfav.getTag().equals("ic_grade_grey_24dp"))  // here "bg" is the tag that you set previously
            {
                Toast.makeText(mContext, "ic_grade_black_24dp", Toast.LENGTH_LONG).show();
                // new RegisterAsyntaskNew().execute();
                viewHolder.imgfav.setImageResource(R.drawable.ic_grade_black_24dp);
                viewHolder.imgfav.setTag("ic_grade_black_24dp");
            }
            else
            {
                Toast.makeText(mContext, "Second", Toast.LENGTH_LONG).show();
                viewHolder.imgfav.setImageResource(R.drawable.ic_grade_grey_24dp);
                viewHolder.imgfav.setTag("ic_grade_grey_24dp");
            }
0

J'ai déjà répondu sur le même sujet ici: Obtenir l'ID d'un dessin dans ImageView . L'approche est basée sur le balisage d'une vue avec un identifiant de ressource spécifié dans la LayoutInflater personnalisée. L'ensemble du processus est automatisé par une simple bibliothèque TagView .

En conséquence, vous pouvez comparer deux tirables uniquement par leurs identifiants:

TagViewUtils.getTag(regProfile, ViewTag.IMAGEVIEW_SRC.id) == R.drawable.ivpic
0
Bogdan Kornev

Je fais face au même problème mais j'ai résolu en kotlin Android 

override fun onClick(v: View?) {

    when (v!!.getId()) {

        R.id.exo_fullscreen_button -> {
            if (exo_fullscreen_icon.drawable.constantState == resources.getDrawable( R.drawable.exo_controls_fullscreen_enter).constantState) {
                Toast.makeText(activity, "Correct Image ", Toast.LENGTH_LONG).show();

            }else{
                Toast.makeText(activity, "wrong image", Toast.LENGTH_LONG).show();

            }
        }
    }

}
0
Prince Kumar

Même solution dans kotlin :

if (regProfile.drawable.constantState == ContextCompat.getDrawable(this, R.drawable.ivpic).constantState) 
   { 
       Toast.makeText(_con, "Image is ivPic", Toast.LENGTH_LONG).show(); 
       // new RegisterAsyntaskNew().execute(); 
   } 
else 
   {
       Toast.makeText(_con, "Image isn't ivPic", Toast.LENGTH_LONG).show(); 
       // new RegisterAsyntask().execute(); 
   }
0
Noelia