2016-06-01 12 views
1

Ich möchte aktuelle Bildansicht mit Bild von R.drawable vergleichen. Ich schätze, ich habe alles versucht, aber ich kann das nicht lösen. Ich habe versucht alles Form Stack Overflow.Android vergleichen imageView mit Bild

XML:

<ImageView 
     android:layout_width="match_parent" 
     android:src="@drawable/red" 
     android:id="@+id/imageview1" 
     android:clickable="true" 
     android:layout_height="match_parent" /> 

Android:

final ImageView test = (ImageView) findViewById(R.id.imageview1); 

test.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
      //if(test.getResources().equals(R.drawable.red)) 
      //if(test.getDrawable().equals(R.drawable.red)) 
      if(test.getDrawable().getConstantState().equals(getResources().getDrawable(R.drawable.red).getConstantState())) 
      { 
       Toast.makeText(getApplicationContext(), "work", Toast.LENGTH_SHORT).show(); 
      } 
      else 
      { 
       Toast.makeText(getApplicationContext(), "not work", Toast.LENGTH_SHORT).show(); 
      } 
    } 
}); 
+2

Willkommen bei Stackoverflow. Vielleicht möchten Sie erklären, warum Sie Bilder vergleichen möchten, da das "Vergleichen von Bildern" im Allgemeinen ein Computer-Vision-Problem ist. –

+0

Ich möchte nur vergleichen, welche Ressource in aktuellen ImageView verwendet wird. In obigem Beispiel wird ein Bild (R.drawable.red) der Bildansicht zugewiesen. Dann möchte ich Reosurces von imageview mit R.drawable.red vergleichen – Michael

+0

versuchen Sie diese Antwort auf Stack-Überlauf .... http: //stackoverflow.com/a/14909358/3678308 –

Antwort

1

Dank Morrison, das war es.

Erste

final ImageView test = (ImageView) findViewById(R.id.imageview1); 
final Bitmap bmap = ((BitmapDrawable)test.getDrawable()).getBitmap(); 
Drawable myDrawable = getResources().getDrawable(R.drawable.red); 
final Bitmap myLogo = ((BitmapDrawable) myDrawable).getBitmap(); 

Weiter

if(bmap.sameAs(myLogo)) 
{ 
do sthng 
} 
1

Wenn Sie einige Informationen anzuzeigen speichern möchten, können Sie Tag verwenden.

<ImageView 
    android:layout_width="match_parent" 
    android:id="@+id/imageview1" 
    android:src="@drawable/red" 
    android:tag="work" 
    android:clickable="true" 
    android:layout_height="match_parent" /> 

und jetzt können Sie

 ImageView image = (ImageView) findViewById(R.id.imageview1); 
    if ("work".equals(image.getTag())){ 
     Toast.makeText(getApplicationContext(), "work", Toast.LENGTH_SHORT).show(); 
    } 

vergleichen Sie diesen Tag von Code festlegen

image.setTag("not work"); 
0

Vor allem dies:

.getResources().getDrawable(imageResource) 

in API21 ist veraltet und höher.

Hier ist ein Beispiel für Code, den Sie zwei Bilder vergleichen können:

imageview.setImageResource(R.drawable.image_name); 
int id= getResources().getIdentifier("@drawable/image_name", null, this.getPackageName()); 

Drawable.ConstantState constantState; 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     constantState = mContext.getResources().getDrawable(id,mContext.getTheme()).getConstantState(); 
    } else { 
     constantState = mContext.getResources().getDrawable(id).getConstantState(); 
    } 

    if (imageview.getDrawable().getConstantState() == constantState) { 
     Log.d(TAG,"Success"); 
    } else { 
     Log.d(TAG,"Not possible"); 
    }