我有一个图像res/drawable/test.png (R.drawable.test)。 我想把这个图像传递给一个接受Drawable的函数,例如mButton.setCompoundDrawables()。

那么如何将图像资源转换为Drawable呢?


当前回答

如果你试图从图像设置为的视图中获取可绘制对象,

ivshowing.setBackgroundResource(R.drawable.one);

然后drawable将只返回空值,代码如下…

   Drawable drawable = (Drawable) ivshowing.getDrawable();

最好用下面的代码来设置图像,如果你想从一个特定的视图中检索drawable。

 ivshowing.setImageResource(R.drawable.one);

只有这样,我们才能精确地转换可绘制对象。

其他回答

如果你从一个片段继承,你可以这样做:

可绘制可绘制= getActivity().getDrawable(R.drawable.icon)

从vector资源中获取Drawable,不管它是否是vector:

AppCompatResources.getDrawable(context, R.drawable.icon);

注意: ContextCompat。getDrawable(上下文,R.drawable.icon);将生成android.content.res。vector资源$NotFoundException

此代码已弃用:

Drawable drawable = getResources().getDrawable( R.drawable.icon );

用这个代替:

Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);

在Kotlin中,你可以这样做:

binding.floatingActionButton.setImageDrawable(
            AppCompatResources.getDrawable(this, android.R.drawable.ic_delete))

其中绑定是根视图,这是指上下文,你需要导入

import androidx.appcompat.content.res.AppCompatResources

你必须通过兼容的方式获得它,其他的不推荐:

Drawable drawable = ResourcesCompat.getDrawable(context.getResources(), R.drawable.my_drawable, null);