AndroidでImageViewの画像をプログラムで変更する


114

プログラムで画像を変更すると、元々レイアウトファイルに設定されていた古い画像の上に新しい画像が表示されますか?

ここに私のレイアウトファイルのスニペットがあります:

<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>

そして、imageViewを設定するコード:

     @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);

                       }
                   });

何が欠けていますか?

回答:


179

これImageViewは、背景ではなくのsrcを設定しているために発生します。

代わりにこれを使用してください:

qImageView.setBackgroundResource(R.drawable.thumbs_down);

ここに、2つの方法の違いについて説明するスレッドがあります。


34
これはAPI 14では機能しません。次のものを使用してください:image.setImageResource(R.drawable.icon_dot1);
Brave

2
@Braveの答えは正しいです。使用するsetBackgroundResource()、私はそこに衝突し2枚の画像を得た..だから新しいイメージを使用する前に、既存のイメージを削除しませんでした:(。 setImageResource()カントー:)を働きました。それでも..投稿は正しい軌道に乗った-両方の答えに感謝します!
Gene Bo

@mricyicyの答えが言うように、問題はxmlが背景画像を定義していて、コードがリソース画像を変更していることです。それらは同じではありません。ここで実際に必要なのはリソースイメージの設定なので、xmlを修正する必要があります。
Martin Epsz

3
なんでsetImageResource
バイオレットキリン

4
@VioletGiraffe ImageView.setImageResource(R.drawable.image);は私のために働きました
jonasxd360

80

XMLでの使用:

android:src="@drawable/image"

ソースの使用:

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

47

短い答え

画像をres/drawableフォルダにコピーして使用するだけです

imageView.setImageResource(R.drawable.my_image);

細部

さまざまな答えが少し混乱を引き起こす可能性があります。我々は持っています

名前に含まれるメソッドはBackgroundすべてViewImageView具体的にではなく、クラスに属しています。しかし、あなたからImageView継承するので、Viewそれらも使用できます。名前にがあるメソッドはImage、特にに属していImageViewます。

Viewすべてのメソッドは互いに同じことを行いますsetBackgroundDrawable()が(非推奨ですが)、ここではに焦点を当てsetBackgroundResource()ます。同様に、ImageViewメソッドはすべて同じことを行うので、に焦点を当てsetImageResource()ます。メソッド間の唯一の違いは、渡すパラメーターのタイプです。

セットアップ

これはFrameLayoutを含むImageViewです。ImageView最初はそれでどんなイメージを持っていません。(FrameLayout境界線を付けることができるように、を追加しただけです。そうすることで、の端が見えるようになりますImageView。)

ここに画像の説明を入力してください

<?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>

以下では、さまざまな方法を比較します。

setImageResource()

ImageViewを使用する場合setImageResource()、画像は縦横比を維持し、収まるようにサイズ変更されます。2つの異なる画像の例を次に示します。

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

ここに画像の説明を入力してください

setBackgroundResource()

setBackgroundResource()一方、Viewを使用すると、画像リソースがビューいっぱいに引き伸ばされます。

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

ここに画像の説明を入力してください

両方とも

ビューの背景画像とImageViewの画像は別々に描画されるため、両方を設定できます。

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

ここに画像の説明を入力してください


1
次の点に注意してくださいsetImageResourceSets a drawable as the content of this ImageView. This does Bitmap reading and decoding on the UI thread, which can cause a latency hiccup. If that's a concern, consider using setImageDrawable(Drawable) or setImageBitmap(Bitmap) and android.graphics.BitmapFactory instead.
ウィリアム・リード

27
qImageView.setImageResource(R.drawable.img2);

これはあなたに役立つと思います


13

android:background="@drawable/thumbs_down これを次のように変更した画像ビューのXMLandroid:src="@drawable/thumbs_down"

現在、その画像はビューの背景として配置されており、実際の画像ではありません。


10

XMLデザイン

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

コードによる描画可能な画像

imageview.setImageResource(R.drawable.imagename);

サーバーイメージ

  ## 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);

0

使用できます

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

またはjava java

Drawable drawableCompat = ContextCompat.getDrawable(getContext(), R.drawable.ic_emoticon_happy)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.