2010-10-30 118 views
33

我正在代碼中的自定義視圖中的畫布上繪製多個圓圈。圓圈是靜態的,不會改變。我想用xml中的ShapeDrawable來繪製它們來幫助清理我的代碼。我將有許多不同的drawable,用戶可以選擇,因此我不想在代碼中做到這一點。有3或4個xml drawables似乎很適合我。在Android中使用ShapeDrawable在Shape中繪製多個形狀

我已經使用ShapeDrawable在xml中創建了一個圓,但無法向xml添加多個形狀。

如何使用ShapeDrawable將多個形狀添加到xml文檔中。

回答

33

我想我已經找到了一個解決方案,使用Layer-list將多個形狀添加到我的xml文件中。 我還沒試過這個,但這似乎不是我想要的,因爲形狀將按照它們的數組索引的順序繪製。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape> 
     <solid android:color="#FFF8F8F8" /> 
     </shape> 
    </item> 
    <item android:top="23px"> 
     <shape> 
     <solid android:color="#FFE7E7E8" /> 
     </shape> 
    </item> 
</layer-list> 

Blog post

Android docs

63

以下是我做了一個像素的黑色邊框填充紅色圓圈,搭配白色號碼72在中間:

創建一個XML文件在res \ drawable並命名它適當,例如red_circle_black_border.xml

<?xml version="1.0" encoding="UTF-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="oval"> 
      <solid android:color="@android:color/black" /> 
     </shape> 
    </item> 
    <item android:top="1dp" android:left="1dp" android:right="1dp" android:bottom="1dp"> 
     <shape android:shape="oval"> 
      <solid android:color="@android:color/red" /> 
     </shape> 
    </item> 
</layer-list> 

然後,用它在你的佈局,其聲明如下:

<TextView 
    android:text="72" 
    android:textSize="14dp" 
    android:textStyle="bold" 
    android:background="@drawable/red_circle_black_border" 
    android:layout_width="22dp" 
    android:layout_height="22dp" 
    android:gravity="center_vertical|center_horizontal" 
    android:textColor="@android:color/white" /> 

顯然,改變TEXTSIZE和layout_width /高度需要:-)

+0

我認爲,如果你有,你可以使用的ImageView沒有文字顯示? – skyfoot 2011-03-23 15:57:15

+2

當然。現在它實際上只是一個可繪圖,所以像圖像一樣使用它。 – 2011-03-26 10:19:14