it-swarm.com.de

Ändern Sie das Image von ImageView programmgesteuert in Android

Wenn ich das Bild programmgesteuert ändere, wird ein neues Bild über dem alten Bild angezeigt, das ursprünglich in der Layoutdatei festgelegt wurde.

Hier ist ein Ausschnitt meiner Layoutdatei:

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="39dp"
    Android:gravity="center_vertical" >
    <ImageView
        Android:id="@+id/qStatusImage"
        Android:layout_width="16dp"
        Android:layout_height="16dp"
        Android:layout_margin="5dp"
        Android:background="@drawable/thumbs_down"
         />

    <TextView
        Android:id="@+id/grp_child"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:textColor="@color/radio_colors"
        Android:textStyle="normal"
        Android:background="@color/grey"
    />

 </LinearLayout>

Und der Code, der das imageView setzt:

     @Override
public View getChildView(final int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
//Answers
            if(answersGroup != null)
                   answersGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                       @Override
                    public void onCheckedChanged(RadioGroup group, int checkedId) {

                         //  int index = answersGroup.indexOfChild(findViewById(answersGroup.getCheckedRadioButtonId()));

                           qImageView = (ImageView) V.findViewById(R.id.qStatusImage);
                           if(ans ==0 || ans == 5){
                            //   qSV.setImageResource(0);
                               qImageView.setImageResource(R.drawable.thumbs_up);
                           }
                           else
                               qImageView.setImageResource(R.drawable.thumbs_down);

                       }
                   });

Was vermisse ich?

92
user1529412

Dies geschieht, weil Sie anstelle des Hintergrunds den Quellcode von ImageView festlegen.

Verwenden Sie dies stattdessen:

qImageView.setBackgroundResource(R.drawable.thumbs_down);

Here ist ein Thread, der über die Unterschiede zwischen den beiden Methoden spricht.

154
Voicu

Verwendung in XML:

Android:src="@drawable/image"

Quellenverwendung:

imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.your_image));
62
fe_araujo_

Kurze Antwort

Kopieren Sie einfach ein Bild in Ihren Ordner res/drawable Und verwenden Sie

imageView.setImageResource(R.drawable.my_image);

Einzelheiten

Die Vielzahl der Antworten kann ein wenig Verwirrung stiften. Wir haben

Die Methoden mit Background im Namen gehören alle zur Klasse View, nicht speziell zu ImageView. Aber da ImageView von View erbt, können Sie sie auch verwenden. Die Methoden mit Image im Namen gehören speziell zu ImageView.

Die View -Methoden haben alle die gleiche Wirkung (obwohl setBackgroundDrawable() veraltet ist), also konzentrieren wir uns nur auf setBackgroundResource(). In ähnlicher Weise machen die ImageView -Methoden alle dasselbe, also konzentrieren wir uns nur auf setImageResource(). Der einzige Unterschied zwischen den Methoden besteht in der Art der Parameter, die Sie übergeben.

Konfiguration

Hier ist ein FrameLayout, das ein ImageView enthält. Das ImageView enthält anfangs kein Bild. (Ich habe nur den FrameLayout hinzugefügt, damit ich ihn umrahmen kann. Auf diese Weise können Sie den Rand des ImageView sehen.)

enter image description here

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <FrameLayout
        Android:id="@+id/frameLayout"
        Android:layout_width="250dp"
        Android:layout_height="250dp"
        Android:background="@drawable/border"
        Android:layout_centerInParent="true">

        <ImageView
            Android:id="@+id/imageView"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"/>

    </FrameLayout>
</RelativeLayout>

Im Folgenden werden die verschiedenen Methoden verglichen.

setImageResource ()

Wenn Sie die Funktion setImageResource() von ImageView verwenden, behält das Bild sein Seitenverhältnis bei und wird an die Größe angepasst. Hier sind zwei verschiedene Bildbeispiele.

  • imageView.setImageResource(R.drawable.sky);
  • imageView.setImageResource(R.drawable.balloons);

enter image description here

setBackgroundResource ()

Wenn Sie dagegen die Funktion setBackgroundResource() von View verwenden, wird die Bildressource gestreckt, um die Ansicht zu füllen.

  • imageView.setBackgroundResource(R.drawable.sky);
  • imageView.setBackgroundResource(R.drawable.balloons);

enter image description here

Beide

Das Hintergrundbild der Ansicht und das Bild der Bildansicht werden separat gezeichnet, sodass Sie beide festlegen können.

imageView.setBackgroundResource(R.drawable.sky);
imageView.setImageResource(R.drawable.balloons);

enter image description here

28
Suragch
qImageView.setImageResource(R.drawable.img2);

Ich denke, das wird dir helfen

26
suraj

In Ihrer XML-Datei für die Bildansicht, in der Sie Android:background="@drawable/thumbs_down Haben, ändern Sie dies in Android:src="@drawable/thumbs_down".

Derzeit wird dieses Bild als Hintergrund für die Ansicht und nicht als eigentliches Bild darin platziert.

13
mricyicy

In XML Design

Android:background="@drawable/imagename 
Android:src="@drawable/imagename"

Zeichenbares Bild per Code

imageview.setImageResource(R.drawable.imagename);

Server-Image

  ## Dependency ##

  implementation 'com.github.bumptech.glide:glide:4.7.1'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'

  Glide.with(context).load(url) .placeholder(R.drawable.image)
   .into(imageView);

 ## dependency  ##
 implementation 'com.squareup.picasso:picasso:2.71828'

 Picasso.with(context).load(url) .placeholder(R.drawable.image)
 .into(imageView);
8

Sie können verwenden

val drawableCompat = ContextCompat.getDrawable(context, R.drawable.ic_emoticon_happy)

oder in Java java

Drawable drawableCompat = ContextCompat.getDrawable(getContext(), R.drawable.ic_emoticon_happy)
0
svkaka