Android Studio - setImageDrawable的工作原理是什么?

4

我一直在试着自学如何使用Android Studio,但是遇到了一个阻碍,这段代码有什么问题?为什么不能使用drawable作为图片?

    public void obama(){
    Switch s = (Switch)findViewById(R.id.obamaswitch);
    s.setOnClickListener(new View.OnClickListener() {
        @Override
                public void onClick(View v) {
            ImageView p = (ImageView)findViewById(R.id.obamahere);
            p.setImageDrawable(R.drawable.brock);
        }
    });
}

如果您想直接传递资源ID,请使用ImageView#setImageResource()方法。否则,在将其传递给setImageDrawable()方法之前,首先使用getDrawable()方法从资源中加载Drawable。 - Mike M.
4个回答

17

你需要知道什么是参数以及setImageDrawablesetImageResource之间的区别。

不同的方法需要不同类型的参数。我的意思是,这种情况下,setImageDrawable需要一个Drawable类型的参数,但你却给了它一个int类型的参数。所以它不能工作。

我不知道你是否知道这一点。在Android中,所有资源ID(即R.xxx.xxx)都是整数!所以当你尝试传递一个整数而实际上需要一个Drawable时,它当然无法执行。

你需要做的是

1)找到一个接受整数作为参数的方法。或;

2)使用资源ID获取Drawable对象。

对于第一种情况,你可以使用setImageResource方法。只需将单词Drawable替换为Resource,其他什么也不用改!

如果你喜欢第二种方式,你可以使用此方法根据资源ID获取drawable对象。

Drawable myDrawable = getResources().getDrawable(<insert your id here>);

然后你可以将 myDrawable 作为参数传递:

p.setImageDrawable(myDrawable);

4

getResources().getDrawable() 在API 22中已被弃用。您应该使用

ContextCompat.getDrawable(context, R.drawable.name_icon)

或者

ResourcesCompat.getDrawable(resources, R.drawable.name_icon, null)

是的,它是已弃用的 API 22。只需添加 ,null。 - Robot79

2
您可以尝试以下方法:
p.setImageDrawable(getResources().getDrawable(R.drawable.brock));

1
将"brock"图像放入drawable文件夹中,并替换此行。
p.setImageDrawable(R.drawable.brock); 

使用:

p.setImageResource(R.drawable.brock);

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