Android Studio - setImageDrawable如何工作?

时间:2016-01-09 23:56:24

标签: android imageview

我一直在努力教自己如何使用Android工作室,但我遇到了障碍,这段代码有什么问题?它不会让我使用绘图设置为图像?

    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);
        }
    });
}

4 个答案:

答案 0 :(得分:13)

您需要知道什么是参数以及setImageDrawablesetImageResource之间的差异。

不同的方法需要不同的参数。我的意思是不同的类型参数。在这种情况下,setImageDrawable需要Drawable类型的参数,但您为其指定了int类型的参数。这就是为什么它不起作用。

我不知道你是否知道这一点。 Android中的所有资源ID(即R.xxx.xxx东西)都是整数!因此,当您尝试在实际需要Drawable时传递整数时,它当然无法执行此操作。

你需要的是

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

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

对于1),您可以使用setImageResource方法。只需将Drawable替换为Resource,然后不做任何其他更改!

如果您更喜欢2),您可以使用此方法使用资源ID获取drawable。

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

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

p.setImageDrawable(myDrawable);

答案 1 :(得分:2)

getResources()。getDrawable()已弃用的API22。您应该使用

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

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

答案 2 :(得分:1)

你可以试试这个:

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

答案 3 :(得分:0)

把&#34; brock&#34;可绘制文件夹中的图像并替换此行

p.setImageDrawable(R.drawable.brock); 

使用:

p.setImageResource(R.drawable.brock);