如何从资源创buildDrawable
我有一个图像res/drawable/test.png
(R.drawable.test)。
我想把这个图像传递给一个接受Drawable
的函数。
(例如mButton.setCompoundDrawables())
那么如何将图像资源转换为Drawable
?
你的活动应该有方法getResources。 做:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
此代码已被弃用。
Drawable drawable = getResources().getDrawable( R.drawable.icon );
使用这个instad。
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
getDrawable (int id)
方法从API 22开始折旧。
相反,您应该使用API 21+的getDrawable (int id, Resources.Theme theme)
代码看起来像这样。
Drawable myDrawable; if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ myDrawable = context.getResources().getDrawable(id, context.getTheme()); } else { myDrawable = context.getResources().getDrawable(id); }
我只想补充一点,如果在使用getDrawable(…)时得到“弃用”消息,应该使用支持库中的以下方法。
ContextCompat.getDrawable(getContext(),R.drawable.[name])
使用此方法时,不必使用getResources()。
这相当于做类似的事情
Drawable mDrawable; if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]); } else { mDrawable = getResources().getDrawable(R.id.[name]); }
这适用于棒棒糖之前和之后的版本。
如果您试图从设置图像的视图中获取drawable,
ivshowing.setBackgroundResource(R.drawable.one);
那么drawable将只返回null值,下面的代码…
Drawable drawable = (Drawable) ivshowing.getDrawable();
因此,如果您想从特定视图中检索绘图,最好使用以下代码设置图像。
ivshowing.setImageResource(R.drawable.one);
只有那样我们才可以完全转换drawable。