我一直在尝试将shape xml导入自定义View。像这样,
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid
android:color="#f0600000"/>
<stroke
android:width="10dp"
android:color="#00FF00"/>
<corners
android:radius="15dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp"
/>
在我的自定义视图代码中,我尝试从外部资源中调用它
private void initTestView(){
Resources res = this.getResources();
mDrawable = (ShapeDrawable)res.getDrawable(R.drawable.recshape);
}
但如果这在模拟器上运行,它会调用错误,因为mDrawable应该是“GradidentDrawable”。但是没有意义的是上层xml代码仅适用于“ShapeDrawable”。 我不明白为什么会这样,有人知道为什么会这样吗?
答案 0 :(得分:14)
奇怪的是,<shape>
XML资源映射到GradientDrawable
,而ShapeDrawable
个对象可用于编程创建。一般来说,我建议只需要转换为Drawable
,除非你需要对形状参数进行运行时修改。
请注意,使用Nine Patch drawable可能更有效,因为通常,raster的性能优于vector。