Android Studio-setImageDrawable如何工作?
我一直在努力教自己如何使用android studio,但我遇到了一个障碍,这段代码有什么问题?它不允许我使用可以设置为图像的绘图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
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)