最近碰到個給edittext設置背景,背景圖類似記事本一樣一行一行的。之前的處理方式是自定義一個view,然后在onDraw方法中繪制背景。后來一想覺得這種方式擴展性不是很強,如果下次改變背景的話還需修改onDraw方法中的代碼。想到Drawable中的xml也可以繪制圖形,不過之前繪制的都是單個圖形,比如圓角矩形,圓形這類的,現在需要繪制的是矩形和線條組合的圖形。可以用到LayerList來實現多個圖形的繪制。如下xml:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <solid android:color="#FFFFFF" /> <corners android:radius="3dip" /> <stroke android:width="1dip" android:color="#7DD43B" /> </shape> </item> <item android:top="-140dp" > <shape android:shape="line"> <stroke android:width="1dp" android:color="#FF0000" android:dashGap="8dp" android:dashWidth="1dp" /> </shape> </item> <item android:top="-60dp" > <shape android:shape="line"> <stroke android:width="1dp" android:color="#FF0000" android:dashGap="8dp" android:dashWidth="1dp" /> </shape> </item> <item android:top="20dp" > <shape android:shape="line"> <stroke android:width="1dp" android:color="#FF0000" android:dashGap="8dp" android:dashWidth="1dp" /> </shape> </item> <item android:top="100dp" > <shape android:shape="line"> <stroke android:width="1dp" android:color="#FF0000" android:dashGap="8dp" android:dashWidth="1dp" /> </shape> </item> <item android:top="180dp" > <shape android:shape="line"> <stroke android:width="1dp" android:color="#FF0000" android:dashGap="8dp" android:dashWidth="1dp" /> </shape> </item> <item android:top="260dp" > <shape android:shape="line"> <stroke android:width="1dp" android:color="#FF0000" android:dashGap="8dp" android:dashWidth="1dp" /> </shape> </item> <item android:top="340dp" > <shape android:shape="line"> <stroke android:width="1dp" android:color="#FF0000" android:dashGap="8dp" android:dashWidth="1dp" /> </shape> </item> </layer-list>
上面的xml就是繪制出來的組合圖形,效果如下圖所示
綠色矩形區域和紅色線條的圖形組合,調用時直接設置EditText的background
就可以達到圖中效果。