การเปลี่ยนแหล่งที่มาของ ImageView


257

ฉันมี ImageViewกับชุดภาพต้นฉบับใน xml โดยใช้ไวยากรณ์ต่อไปนี้:

   <ImageView 
      android:id="@+id/articleImg"
      style="@style/articleImgSmall_2"
      android:src="@drawable/default_m" />

ตอนนี้ฉันต้องเปลี่ยนภาพนี้โดยทางโปรแกรม สิ่งที่ฉันต้องทำคือลบภาพเก่าและเพิ่มภาพใหม่ สิ่งที่ฉันทำคือ:

myImgView.setBackgroundResource(R.drawable.monkey);

มันใช้งานได้ แต่ฉันสังเกตเห็นว่า Android ซ้อนภาพใหม่ที่ด้านบนของภาพเก่า (อย่าถามฉันว่าฉันรู้ได้อย่างไรว่ามันไม่เกี่ยวข้องกับการอภิปราย :) ฉันต้องกำจัดอันเก่าอย่างแน่นอนก่อนที่จะตั้งภาพใหม่

ฉันจะบรรลุสิ่งนั้นได้อย่างไร

คำตอบ:


635

การเปลี่ยนแหล่งที่มาของ ImageView:

ใช้setBackgroundResource()วิธีการ:

  myImgView.setBackgroundResource(R.drawable.monkey);

คุณกำลังวางลิงนั้นไว้ในพื้นหลัง

ฉันขอแนะนำให้ใช้setImageResource()วิธีการ:

  myImgView.setImageResource(R.drawable.monkey);

หรือด้วยsetImageDrawable()วิธีการ:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));

*** ด้วย Android API 22 ใหม่getResources().getDrawable()เลิกใช้แล้ว นี่คือตัวอย่างวิธีใช้ตอนนี้:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));

และวิธีตรวจสอบสำหรับ API เวอร์ชันเก่า:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));
   } else {
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));
}

โอ้เยี่ยมมาก ... น่าเสียดายที่ฉันเพิ่งพบว่าฉันต้องเปลี่ยนชุดรูปภาพด้วย myImgView.setImageDrawable (img); รหัสที่คุณแนะนำ myImgView.setImageResource (R.drawable.monkey); ไม่สามารถทำได้ ฉันจะกำจัด drawable ก่อนเรนลิงได้อย่างไร :) ขอบคุณมาก
nourdine

1
getDrawable (int) เลิกใช้แล้วและเพิ่ม getDrawable (int, ธีม) ใน API-21 ตอนนี้จะทำอย่างไร? คุณช่วยอัพเดทคำตอบของคุณได้ไหม
mubeen

การโทรต้องใช้ API ระดับ 16 (ขั้นต่ำปัจจุบันคือ 13): android.widget.ImageView#setBackground
Iman Marashi

ContextCompat ที่จะได้รับ drawable โดยไม่ต้อง getTheme
Outofdate


32
myImgView.setImageResource(R.drawable.monkey);

ใช้สำหรับตั้งค่าภาพในมุมมองภาพปัจจุบัน แต่หากต้องการลบภาพนี้คุณสามารถใช้รหัสนี้เช่น:

((ImageView) v.findViewById(R.id.ImageView1)).setImageResource(0);

ตอนนี้สิ่งนี้จะลบภาพออกจากมุมมองภาพของคุณเพราะมันได้ตั้งค่าทรัพยากรเป็นศูนย์


18

รับ ID ของ ImageView เป็น

ImageView imgFp = (ImageView) findViewById(R.id.imgFp);

จากนั้นใช้

imgFp.setImageResource(R.drawable.fpscan);

เพื่อตั้งค่ารูปภาพต้นฉบับโดยใช้โปรแกรมแทนจาก XML


8

หรือลองอันนี้ สำหรับฉันมันใช้งานได้ดี:

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));

5

คำตอบภาพเพิ่มเติม

ImageView: setImageResource()(วิธีมาตรฐานอัตราส่วนภาพจะถูกเก็บไว้)

ป้อนคำอธิบายรูปภาพที่นี่

View: setBackgroundResource()(ขยายภาพ)

ป้อนคำอธิบายรูปภาพที่นี่

ทั้งสอง

ป้อนคำอธิบายรูปภาพที่นี่

คำตอบของฉันคือฟูลเลอร์ที่นี่


3

หากคุณต้องการตั้งค่าใน imageview ภาพที่อยู่ภายในmipmap dirsคุณสามารถทำได้เช่นนี้:

myImageView.setImageDrawable(getResources().getDrawable(R.mipmap.my_picture)


2

เพียงเขียนวิธีการเปลี่ยนมุมมองภาพ

public void setImage(final Context mContext, final ImageView imageView, int picture)
{
    if (mContext != null && imageView != null)
    {
        try
        {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
            {
                imageView.setImageDrawable(mContext.getResources().getDrawable(picture, mContext.getApplicationContext().getTheme()));
            } else
            {
                imageView.setImageDrawable(mContext.getResources().getDrawable(picture));
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.