2010-06-18 43 views
3

我一直在嘗試導入形狀xml到自定義視圖。這樣,如何將形狀資源(xml)導入代碼?

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

但如果這ruuning的模擬器,它叫錯誤,因爲mDrawable應該叫它是「GradidentDrawable」。但是沒有意義的是上面的xml代碼僅適用於「ShapeDrawable」。 我不明白爲什麼會發生,有人知道它爲什麼會發生?

+1

這可能只是一個複製/粘貼錯誤,但你永遠不會關閉你的形狀。實際文件末尾是否有? – CaseyB 2010-06-18 03:27:22

+0

這是我的錯,而複製/粘貼,謝謝! – tomahawk28 2010-06-20 00:36:48

回答

11

奇怪的是,<shape> XML資源映射到GradientDrawable,而ShapeDrawable對象用於編程創建。一般來說,我建議只鑄造到Drawable,除非您需要對形狀參數進行運行時修改。

請注意,使用Nine Patch drawable可能更有效,因爲一般來說,柵格比矢量具有更好的性能。

+0

謝謝,我按照你的說法將它投射到Drawable,並且它現在起作用。真的很感激它! – tomahawk28 2010-06-24 02:23:26