在Android中以编程方式实现android:src =“@drawable / image”

49

我正在尝试在图像按钮上设置前景图像。经过一些研究,我找到了这个代码示例:

<ImageButton android:text="Button" android:id="@+id/button1"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:src="@drawable/icon"/>

我的问题是如何在代码中实现android:src。

6个回答

113

尝试这样做:

ImageButton btn = (ImageButton)findViewById(R.id.button1);
btn.setImageResource(R.drawable.newimage);

其中newimagedrawable文件夹中的图像名称。

编辑
尝试这个:

ImageButton btn = (ImageButton)findViewById(R.id.button1);
btn.setImageBitmap(bm);

其中bm是从服务器提取的位图。

再次编辑
我看到你收到了一个Drawable;好的,做这个:

normalImage = Drawable.createFromStream(code);
Bitmap bm = ((BitmapDrawable)normalImage).getBitmap();
ImageButton btn = (ImageButton)findViewById(R.id.button1);
btn.setImageBitmap(bm);

非常感谢。但是,我是从服务器获取图像而不是将其存储在drawable文件夹中,有没有实现这一点的方法? - user788511
这是超级Marco,但我只能使用可绘制对象..这是设计规范..我不能使用位图。 - user788511
@user788511:你导入了正确的库吗?你是在编译时还是运行时遇到了这个错误? - Marco
@user788511:仍然没有进展并不能帮助我们理解您面临的问题。请更好地解释一下:在您插入正确的导入并修改代码后,发生了什么?1. 您是否正确地从服务器接收到可绘制对象?2. 您的可绘制对象是否已转换为位图? - Marco
抱歉。在我修复了导入并运行代码后,图像不像使用setImageResource()那样显示在前景中,而是显示在背景中。 - user788511
显示剩余9条评论

15

以下是我在编程时如何通过代码为ImageButton设置image:src的方法:

1.获取图像可绘制对象。

Drawable tempImage = getResources().getDrawable(R.drawable.my_image);

2. 获取视图。

ImageButton tempButton = (ImageButton)findViewById(R.id.my_image_button);

3.设置视图的图像。

tempButton.setImageDrawable(tempImage);

希望这对你也有用!


2
非常清晰!请注意,步骤1使用的API已在API Level 22中被弃用。我将其替换为:ContextCompat.getDrawable(context,R.drawable.my_image)。 - stevehs17

4
希望这能帮到您。
ImageButton button1=(ImageButton)findViewById(R.id.button1);       
button1.setImageResource(R.drawable.icon);

非常感谢。但是,我是从服务器获取图像而不是将其存储在drawable文件夹中,有没有实现这一点的方法? - user788511
我认为你可以从那个图像创建一个位图对象,并使用button1.img.setImageBitmap(yuorbitmapobject)。 - Android Killer

3

试试这个:

ImageButton tran_btn_skip;

tran_btn_skip = (ImageButton) findViewById(R.id.btn);
    try {
        Bitmap bitmap_skip = BitmapFactory.decodeStream((InputStream) new URL(
                "http://233.129.115.55/MRESC/images/test/skip.png")
                .getContent());
        tran_btn_skip.setImageBitmap(bitmap_skip);
    } catch (Exception e) {
    }

非常感谢。但是,我是从服务器获取图像而不是将其存储在drawable文件夹中,有没有实现这一点的方法? - user788511
通过这个方法,你可以从特定的URL获取图像。 - Nikunj Patel
这很棒,Nik。不过我正在使用drawable而不是bitmap,有什么解决方法吗? - user788511
基本上它可以将任何位图格式的图像设置在按钮上。相信我,试一试并投票给我。 - Nikunj Patel
将任何临时URL复制并粘贴到代码中进行尝试,但请确保在清单中需要添加Internet权限。 - Nikunj Patel
d = 新的 BitmapDrawable(getResources(), bitmap_skip ); - FrankKrumnow

2

另一种简短的变体

views.setImageViewResource(R.id.button1, R.drawable.newbutton);

0

我知道这是一个老问题,但是为了未来的搜索... 我相信你正在寻找的是:

imgButton.setImageDrawable(drawable);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接