Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio-setImageDrawable如何工作?_Android_Imageview - Fatal编程技术网

Android Studio-setImageDrawable如何工作?

Android Studio-setImageDrawable如何工作?,android,imageview,Android,Imageview,我一直在努力教自己如何使用android studio,但我遇到了一个障碍,这段代码有什么问题?它不允许我使用可以设置为图像的绘图 public void obama(){ Switch s = (Switch)findViewById(R.id.obamaswitch); s.setOnClickListener(new View.OnClickListener() { @Override public void onCl

我一直在努力教自己如何使用android studio,但我遇到了一个障碍,这段代码有什么问题?它不允许我使用可以设置为图像的绘图

    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);
        }
    });
}
您可以尝试以下方法:

p.setImageDrawable(getResources().getDrawable(R.drawable.brock));

您需要知道什么是参数以及
setImageDrawable
setImageResource
之间的区别

不同的方法需要不同的参数。我指的是不同类型的参数。在本例中,
setImageDrawable
需要类型为
Drawable
的参数,但您为它提供了类型为
int
的参数。所以这就是它不起作用的原因

我不知道你是否知道。Android中的所有资源ID(即
R.xxx.xxx
thingy)都是整数!因此,当您试图传递一个整数时,它实际上需要一个
可绘制的
,它当然无法传递

你需要的是

1) 查找接受整数作为参数的方法。或

2) 使用资源id获取可绘制的对象

对于1),可以使用
setImageResource
方法。只需将单词
Drawable
替换为
Resource
,而不做任何更改

如果您更喜欢2),则可以使用此方法使用资源id获取可绘制文件

Drawable myDrawable = getResources().getDrawable(<insert your id here>);
将“brock”图像放在可绘制文件夹中,并替换此行

p.setImageDrawable(R.drawable.brock); 
与:

getResources().getDrawable()已弃用API 22。你应该使用

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


如果要直接传递资源ID,请使用
ImageView#setImageResource()
方法。否则,请先使用
getDrawable()
方法从资源中加载Drawable,然后再将其传递到
setImageDrawable()
方法中。是的,这是不推荐使用的API 22。只需添加,空
p.setImageResource(R.drawable.brock);
ContextCompat.getDrawable(context, R.drawable.name_icon)
ResourcesCompat.getDrawable(resources, R.drawable.name_icon, null)