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

다음 은 두 방법의 차이점에 대해 설명하는 스레드입니다.


34
API 14에서는 작동하지 않습니다. 다음을 사용해야합니다.image.setImageResource(R.drawable.icon_dot1);
Brave

2
@Brave의 대답이 맞습니다. 사용 setBackgroundResource()내가 거기에 충돌하는 두 개의 이미지를 가지고, 그래서 .. 새 이미지를 사용하기 전에 기존 이미지를 제거하지 않았다 :(. setImageResource()상점 :)을했다. 그래도 .. 게시물은 저를 올바른 방향으로 이끌었습니다. 두 가지 답변에 감사드립니다!
Gene Bo

@mricyicy의 대답에 따르면 문제는 xml이 배경 이미지를 정의하고 코드가 리소스 이미지를 변경한다는 것입니다. 그것들은 동일하지 않습니다. 리소스 이미지를 설정하는 것은 여기서 실제로 원하는 것이므로 xml을 수정해야합니다.
Martin Epsz 2015 년

3
왜 안돼 setImageResource?
Violet Giraffe

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이름에 있는 메서드는 모두 구체적이 View아니라 클래스에 속합니다 ImageView. 그러나 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()하면 이미지가 종횡비를 유지하고 크기가 조정됩니다. 다음은 두 가지 다른 이미지 예입니다.

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

여기에 이미지 설명 입력

setBackgroundResource ()

setBackgroundResource()반면에 View의를 사용 하면 이미지 리소스가 뷰를 채우기 위해 늘어납니다.

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

여기에 이미지 설명 입력

양자 모두

View의 배경 이미지와 ImageView의 이미지는 별도로 그려 지므로 둘 다 설정할 수 있습니다.

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

여기에 이미지 설명 입력


1
다음에 대해 다음 사항에 유의하십시오 setImageResource.Sets 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.
William Reed

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

나는 이것이 당신을 도울 것이라고 생각합니다


13

이미지보기에 대한 XML에서 android:background="@drawable/thumbs_down 이를 다음으로 변경했습니다.android: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)

또는 자바 자바

Drawable drawableCompat = ContextCompat.getDrawable(getContext(), R.drawable.ic_emoticon_happy)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.