web-dev-qa-db-ja.com

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

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

これが私のレイアウトファイルのスニペットです。

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

                       }
                   });

私は何が欠けていますか?

88
user1529412

これは、バックグラウンドではなくImageViewのsrcを設定しているために発生します。

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

qImageView.setBackgroundResource(R.drawable.thumbs_down);

ここ は、2つのメソッドの違いについて話すスレッドです。

151
Voicu

XMLで使用:

Android:src="@drawable/image"

ソースの使用:

imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.your_image));
60
fe_araujo_
qImageView.setImageResource(R.drawable.img2);

これはあなたを助けると思う

25
suraj

短い答え

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

imageView.setImageResource(R.drawable.my_image);

詳細

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

名前にBackgroundが含まれるメソッドは、すべてViewにではなく、ImageViewクラスに属します。ただし、ImageViewViewを継承するため、使用することもできます。名前にImageが含まれるメソッドは、特にImageViewに属します。

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

セットアップ

以下は、FrameLayoutを含むImageViewです。 ImageViewには最初は画像がありません。 (FrameLayoutを追加したのは、その周囲に境界線を配置できるようにするためです。そのようにすると、ImageViewのエッジを確認できます。)

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>

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

setImageResource()

ImageViewのsetImageResource()を使用する場合、画像はアスペクト比を維持し、収まるようにサイズ変更されます。以下に2つの異なる画像の例を示します。

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

enter image description here

setBackgroundResource()

一方、ViewのsetBackgroundResource()を使用すると、画像リソースが拡大されてビューがいっぱいになります。

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

enter image description here

両方

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

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

enter image description here

24
Suragch

Android:background="@drawable/thumbs_downがある画像ビューのXMLで、これをAndroid:src="@drawable/thumbs_down"に変更します

現在、その画像を実際の画像ではなく、ビューの背景として配置しています。

13
mricyicy

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

使用できます

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

またはJava java

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