2014-04-29 10 views
14

Chcę sprawdzić, który zasób obrazu jest dołączony do ImageView w xml, jestem w stanie sprawdzić, który zasób obrazu jest dołączony do widoku obrazu, ale moim wymaganiem jest sprawdzenie, czy ImageView ma ten sam zasób, który ustawiłem w xml lub nie, w oparciu o to muszę wykonać niektóre akcje. Kode zawsze wykonuje inną część. Oto mój kod,Jak sprawdzić, który zasób obrazu jest podłączony do ImageView w Androidzie xml?

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

zobaczyć moją odpowiedź teraz. –

+0

odpowiedź jest aktualizowana proszę przejrzeć –

+0

proszę o informacje na mój woki odpowiedzi dla ciebie, czy nie, jak sprawdziłem z moim kodem to działa dobrze !! Pracowałem tylko nad scenariuszem i spędziłem tam trochę czasu i osiągnąłem sukces! –

Odpowiedz

41

Hi proszę spróbować z tym następująco

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

skorzystaj .getConstantState() porównać

wizyta

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

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

EDIT:

.getResources().getDrawable(imageResource) 

jest przestarzałe w API21, więc zmieniłem odpowiedź Jitesh Upadhyay użytkownika.

Oto kod:

@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; 
} 
+0

Dzięki Jitesh, przy użyciu .getConstantState(), w stanie wykonać zadanie. – Reena

+0

Dzięki Sir Nlkolay, twój zaktualizowany kod ukończył moją pracę. – SimplyProgrammer

+0

Najbardziej Witamy @Reena i SimplyProgrammer –

10

można zrobić coś takiego po,

Ustaw tag albo poprzez XML lub dynamicznie, jak na swoje wymagania.

poprzez XML,

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

dynamicznie

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

Zastosowanie imageView.getTag() do pobierania informacji o obrazie.

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

Edit:

jeśli zmieniają ImageView tło często wtedy,

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

Teraz możesz dokonać wyboru.

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

Dzięki za odpowiedź, ale kiedy zmienię obraz obrazu, to w przeciwnym razie część powinna zostać wykonana, dlatego próbowałem uzyskać, który zasób jest dołączony do obrazu. – Reena

+0

@Reena: Zobacz moją zredagowaną odpowiedź. –

+0

To jest logika, której użyłem. Dzięki – viper