如何将形状资源(xml)导入代码?

时间:2010-06-18 02:34:24

标签: xml android

我一直在尝试将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”。 我不明白为什么会这样,有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:14)

奇怪的是,<shape> XML资源映射到GradientDrawable,而ShapeDrawable个对象可用于编程创建。一般来说,我建议只需要转换为Drawable,除非你需要对形状参数进行运行时修改。

请注意,使用Nine Patch drawable可能更有效,因为通常,raster的性能优于vector。