該博客項目來源及參考文檔:http://blog.csdn.net/bear_huangzhen/article/details/24488337java
首先看一下結果:android
MainActivity.javaapp
package com.example.shapedemo; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
那麼首先來看activity_main.xmlide
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button" android:text="TestShapeButtondfasfafasdfas" /> </RelativeLayout>
Button試用了selector button.xmlspa
button.xml文件以下:.net
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/button_pressed_bg" android:state_pressed="true"></item> <item android:drawable="@drawable/button_bg"></item> </selector>
兩種狀態爲 button_pressed_bg.xml和button_bg.xml文件。3d
button_pressed_bg.xml文件中試用了shape,以下:code
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 漸變 --> <gradient android:endColor="#FFFFFF" android:gradientRadius="50" android:startColor="#ff8c00" android:type="radial" /> <!-- 描邊 --> <stroke android:dashGap="3dp" android:dashWidth="5dp" android:width="2dp" android:color="#dcdcdc" /> <!-- 圓角 --> <corners android:radius="5dp" /> <!-- 間隔 --> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> </shape>
button_bg.xml文件以下:xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 填充 --> <solid android:color="#ff9d77" /> <!-- 定義填充的顏色值 --> <!-- 描邊 --> <stroke android:width="2dp" android:color="#fad3cf" /> <!-- 定義描邊的寬度和描邊的顏色值 --> <!-- 圓角 --> <corners android:bottomLeftRadius="5dp" android:bottomRightRadius="5dp" android:topLeftRadius="5dp" android:topRightRadius="5dp" /> <!-- 設置四個角的半徑 --> <!-- 間隔 --> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> <!-- 設置各個方向的間隔 --> </shape>
例子看完了來看一下shape的屬性:blog
"
在Android程序開發中,咱們常常會去用到Shape這個東西去定義各類各樣的形狀,首先咱們瞭解一下Shape下面有哪些標籤,都表明什麼意思:
solid:填充
android:color指定填充的顏色
gradient:漸變
android:startColor和android:endColor分別爲起始和結束顏色,
android:angle是漸變角度,必須爲45的整數倍。
另外漸變默認的模式爲android:type="linear",即線性漸變,
能夠指定漸變爲徑向漸變,android:type="radial",徑向漸變須要指定半徑android:gradientRadius="50"。
angle值對應的位置如圖:
stroke:描邊
android:width="2dp" 描邊的寬度,android:color 描邊的顏色。
咱們還能夠把描邊弄成虛線的形式,設置方式爲:
android:dashWidth="5dp"
android:dashGap="3dp"
其中android:dashWidth表示'-'這樣一個橫線的寬度,android:dashGap表示之間隔開的距離
corners:圓角
android:radius爲角的弧度,值越大角越圓。
咱們還能夠把四個角設定成不一樣的角度,
同時設置五個屬性,則Radius屬性無效
android:Radius="20dp" 設置四個角的半徑
android:topLeftRadius="20dp" 設置左上角的半徑
android:topRightRadius="20dp" 設置右上角的半徑
android:bottomLeftRadius="20dp" 設置右下角的半徑
android:bottomRightRadius="20dp" 設置左下角的半徑
padding:間隔
能夠設置上下左右四個方向的間隔
"
這裏須要說明的是:間隔是指內部填充內容到四周的間隔。