2017-01-10 7 views
0

Ich würde gerne ein ImageView ändern, wenn ein boolean "wahr" wird. In diesem Fall möchte ich von "normalen Sternen" zu "gelben Sternen" wechseln, wenn der Benutzer eine bestimmte Erfahrung macht. Ich habe tatsächlich einen ähnlichen Code mit ImageButton. Dies ändert das Bild wenn die Taste gedrückt wird, aber dann zurück zum Original.Wie man ein ImageView ändert, ohne das Format zu verlieren

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:drawable="@drawable/star_normal" 
      android:state_pressed="true" /> 
     <item android:drawable="@drawable/star_yellow" /> 
</selector> 

und

<ImageButton 
          android:layout_width="@dimen/_48sdp" 
          android:layout_height="@dimen/_48sdp" 
          android:id="@+id/star" 
          android:layout_weight="1" 
          android:layout_marginLeft="@dimen/_15sdp" 
          app:srcCompat="@drawable/star/> 

Wie möglich ist, eine ImageView zu ersetzen, ohne Position zu verlieren Format in das Layout Erhaltung, dp. ??? Ohne Verwendung von Tasten sollte der Benutzer das Bild nicht selbst ändern.

+0

Warum sind Sie besorgt über die Größe? Die Bilder, die Sie wechseln möchten, haben eine andere Größe? Wenn ja, geben Sie maxWidth und maxHeight an. –

+0

weil auf diese Weise die Bilder in verschiedenen Bildschirmen mit den gleichen Proportionen gesehen werden können, wie hier https://github.com/intuit/sdp – baldcl

Antwort

0

Ich bin kein Fan von Selektoren so würde ich es wie so programmatisch tun:

if (boolean){ 
    imageView.setImageResource(R.drawable.star_yellow); 
} 

Um zu vermeiden, geben Sie Ändern der Größe Ihrer Image xml wie diese

<ImageView 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:id="@+id/img" 
    android:src="@drawable/star_normal" 
    android:maxHeight="48dp" 
    android:maxWidth="48dp"/> 
Verwandte Themen