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();
}
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;
}
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();
}
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");
}
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
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();
}
}
}
}
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();
}