歡迎您光臨本站 註冊首頁

Android自定義Shape 加上陰影shadow之方法

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

Android支持自定義Shape, 以畫出需要的形狀,可以作為TextView, EditText, Button的背景drawable資源。Shape很簡單,就是一個XML文件,SDK文檔里描述其格式如下:

  1. xml version="1.0" encoding="utf-8"?>  
  2. <shape  
  3.     xmlns:Android="http://schemas.android.com/apk/res/android"  
  4.     Android:shape=["rectangle" | "oval" | "line" | "ring"] >  
  5.     <corners  
  6.         Android:radius="integer"  
  7.         Android:topLeftRadius="integer"  
  8.         Android:topRightRadius="integer"  
  9.         Android:bottomLeftRadius="integer"  
  10.         Android:bottomRightRadius="integer" />  
  11.     <gradient  
  12.         Android:angle="integer"  
  13.         Android:centerX="integer"  
  14.         Android:centerY="integer"  
  15.         Android:centerColor="integer"  
  16.         Android:endColor="color"  
  17.         Android:gradientRadius="integer"  
  18.         Android:startColor="color"  
  19.         Android:type=["linear" | "radial" | "sweep"]   
  20.         Android:usesLevel=["true" | "false"] />  
  21.     <padding  
  22.         Android:left="integer"  
  23.         Android:top="integer"  
  24.         Android:right="integer"  
  25.         Android:bottom="integer" />  
  26.     <size  
  27.         Android:width="integer"  
  28.         Android:height="integer" />  
  29.     <solid  
  30.         Android:color="color" />  
  31.     <stroke  
  32.         Android:width="integer"  
  33.         Android:color="color"  
  34.         Android:dashWidth="integer"  
  35.         Android:dashGap="integer" />  
  36. shape>  

其支持的屬性沒有shadow, 做Web前端開發的同學寫CSS可以很方便地加一個shadow屬性值,如何給Android Shape加一個shadow,以得到類似的效果呢?

答案是使用layer-list !   直接上代碼如下:

  1. xml version="1.0" encoding="utf-8"?>  
  2. <layer-list xmlns:Android="http://schemas.android.com/apk/res/android">  
  3.   
  4.     <item>  
  5.         <shape Android:shape="rectangle">  
  6.             <solid Android:color="#792a03" />  
  7.             <corners Android:radius="19dp" />  
  8.         shape>  
  9.     item>  
  10.        
  11.     <item  Android:top="1px">  
  12.         <shape Android:shape="rectangle">  
  13.             <gradient Android:startColor="#ffdb8f" android:endColor="#ffdb8f"  
  14.                 Android:angle="270" />  
  15.             <padding Android:left="5dp" android:top="3dp" android:right="5dp"  
  16.                 Android:bottom="3dp" />  
  17.             <corners Android:radius="20dp" />  
  18.         shape>  
  19.   
  20.     item>  
  21.   
  22.  layer-list>  

將以上xml存成btn_test, 放到res/drawable/目錄下。 將該drawable xml設為一個TextView的backgroiund,

  1. <TextView  
  2.        Android:background="@drawable/btn_test"  
  3.   
  4.         Android:layout_marginTop="20dip"  
  5.         Android:layout_marginLeft="5dip"  
  6.     Android:textColor="#792a03"            
  7.            
  8.         Android:text="1天2小時14分20秒"  
  9.        Android:layout_width="wrap_content"    
  10.        Android:layout_height="wrap_content" />  

其效果如下圖所示: 

 

關於layer-list的進一步解釋見SDK文檔,如下: 

Layer List

A LayerDrawable is a drawable object that manages an array of other drawables. Each drawable in the list is drawn in the order of the list—the last drawable in the list is drawn on top.

Each drawable is represented by an element inside a single element.

file location:
res/drawable/filename .xml
The filename is used as the resource ID.
compiled resource datatype:
Resource pointer to a LayerDrawable .
resource reference:
In Java: R.drawable.filename
In XML: @[package :]drawable/filename
syntax:

Xml代碼
  1. xml version="1.0" encoding="utf-8"?>  
  2. <layer-list  
  3.     xmlns:Android="http://schemas.android.com/apk/res/android" >  
  4.     <item  
  5.         Android:drawable="@[package:]drawable/drawable_resource"  
  6.         Android:id="@[+][package:]id/resource_name"  
  7.         Android:top="dimension"  
  8.         Android:right="dimension"  
  9.         Android:bottom="dimension"  
  10.         Android:left="dimension" />  
  11. layer-list>  
 

 

elements:
Required. This must be the root element. Contains one or more elements.

attributes:

xmlns:Android
String . Required. Defines the XML namespace, which must be "http://schemas.android.com/apk/res/android" .
Defines a drawable to place in the layer drawable, in a position defined by its attributes. Must be a child of a element. Accepts child elements.

attributes:

Android:drawable
Drawable resource . Required . Reference to a drawable resource.
android:id
Resource ID . A unique resource ID for this drawable. To create a new resource ID for this item, use the form: "@+id/name " . The plus symbol indicates that this should be created as a new ID. You can use this identifier to retrieve and modify the drawable with View.findViewById() or Activity.findViewById() .
android:top
Integer . The top offset in pixels.
android:right
Integer . The right offset in pixels.
android:bottom
Integer . The bottom offset in pixels.
android:left
Integer . The left offset in pixels.

All drawable items are scaled to fit the size of the containing View, by default. Thus, placing your images in a layer list at different positions might increase the size of the View and some images scale as appropriate. To avoid scaling items in the list, use a element inside the element to specify the drawable and define the gravity to something that does not scale, such as "center" . For example, the following defines an item that scales to fit its container View:

Xml代碼
  1. <item Android:drawable="@drawable/image" />

     

    To avoid scaling, the following example uses a element with centered gravity:

    Xml代碼
    1. <item>  
    2.   <bitmap Android:src="@drawable/image"  
    3.           Android:gravity="center" />  
    4. item>  
     
    example:
    XML file saved at res/drawable/layers.xml :

    Xml代碼
    1. xml version="1.0" encoding

    好文,頂一下
    (7)
    53.8%
    文章真差,踩一下
    (6)
    46.2%
    ------分隔線----------------------------
    • 上一篇:App設計VS Web設計:互相學習到了什麼
    • 下一篇:Windows環境利用VMware7.1.3 搭建iPhone開發環境
    • 我要評論!
    • 收藏
    • 挑錯
    • 推薦
    • 列印


把開源帶在你的身邊-精美linux小紀念品
文章分類
    新聞動態 企鵝看世界 軟體更新資訊 新手入門 資料庫類 系統安全 系統管理 網路管理 使用經驗 編程開發 企業應用 硬體相關 Unix家族 觀點評論 人物介紹 技術前沿 專題 開源生活 開源美圖 英文資料 Eden團隊出品 開源軟體庫
軟體導航
  • 發行版類 內核相關 伺服器類 模擬模擬 文件管理
  • 系統安全 多媒體類 硬體工具 編程開發 網路熱門
  • 雜類工具 網路工具 圖形圖像 閱讀編輯 書籍資料
  • 遊戲軟體 辦公軟體 數據備份 中文相關 系統管理
  • 科學計算 資料庫類 XWin系統
論壇導航
  • 初級應用-> 新手入門 | 伺服器應用 | 中文化 | 軟體使用交流 | 硬體驅動 | 圖片秀 | 茶館
  • 高級應用->資料庫 | 系統安全 | 嵌入式應用|
  • 編程開發-> C/C++(STL/boost) | 內核 | RAD|Perl/PHP/Python | JAVA/XML | Shell
  • 發行版-> Redhat和Fedora | Debian | Gentoo | Slackware/Suse | Mandrake/Mandriva
  • Unix ->FreeBSD | Solaris | 其他Unix討論
論壇精華
一周熱點

[火星人 ] Android自定義Shape 加上陰影shadow之方法已經有1595次圍觀

http://coctec.com/docs/program/show-post-71511.html