為控件添加陰影效果-最簡單的實(shí)現(xiàn)方法

為控件添加陰影效果-最簡單的實(shí)現(xiàn)方法

  • 我們知道Android5.0 引入了Z軸的概念,于是就有著這種風(fēng)格,也就是目前比較火的Material Design。
  • 我們可以直接為控件設(shè)置android:elevation這個屬性,來讓他實(shí)現(xiàn)“漂浮”效果
  • 可是,我們?nèi)粘3S玫囊恍┳罨镜腂utton這些東西卻是不支持這個屬性
  • 那么,我們?nèi)绻胱屛覀兊目丶∑饋恚撛趺崔k呢?

實(shí)現(xiàn)

  • 效果


    image
  • 這里的東西其實(shí)只是一個Button而已,可是通過我們的設(shè)置之后就變成了一個擁有陰影的控件,是不是很高大上呢?
  • 其實(shí)這里面的東西并不復(fù)雜
  • 我們都知道,通過drawable的shape結(jié)點(diǎn),可以設(shè)置圖形的圓角什么的屬性,關(guān)于介紹shape請移駕這里
  • 不過shape這么用,好像沒有設(shè)置陰影啥的東西啊
  • 這里,Android還為我們提供了一個layer-list結(jié)點(diǎn),然后在它的內(nèi)部可以這樣用
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        
    </item>
    <item
        android:left="1dp"
        android:top="1dp"
        android:right="1dp"
        android:bottom="5dp">
       
    </item>
</layer-list>
  • 大家先不管別的,就是在layer-list節(jié)點(diǎn)下有一個Item屬性,這個屬性表示層,下面的Item會將上面的Item覆蓋
  • 這里先來個例子簡單的說明這個Item的效果
  • xml代碼如下
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:left="1dip"
        android:right="1dip"
        android:top="1dip"
        android:bottom="1dip">
        <shape>
            <solid android:color="@color/colorAccent"/>
        </shape>
    </item>
    
    <item android:left="5dip"
        android:right="5dip"
        android:top="5dip"
        android:bottom="5dip">
        <shape>
            <solid android:color="@color/colorPrimary"/>
        </shape>
    </item>
    
    <item android:left="10dip"
        android:right="10dip"
        android:top="10dip"
        android:bottom="10dip">
        <shape>
            <solid android:color="#FF0"/>
        </shape>
    </item>
    
</layer-list>
  • 這里我們在Item里面定義了三個Item,然后Item的左上右下的值分別遞增,然后在Item的內(nèi)部我們給每一個Item都設(shè)置不同的顏色
  • 接下來,就是見證奇跡的時刻了
  • 我給Button設(shè)置background屬性為這個xml文件,然后,效果看圖


    image
  • 有沒有和你想象的一樣呢?
  • 我們剛才說的Item的意思是層吧?這里明顯是分成了三層,那么為什么每一層的大小不一樣呢?
  • 這里就要?dú)w功于我們給Item設(shè)置的那四個參數(shù)了,那四個參數(shù)分別表示在每個方向往內(nèi)的偏移量,所以我們給最后一個Item的四個偏移量設(shè)置到最大,不然,如果最上層的偏移量不夠的話,他會將下面的層(或者說寫在上面的item)給覆蓋掉
  • 這就是簡單用法了,我們可以在Item里面是用shape屬性將這個控件設(shè)置的奇形怪狀(額,這里找不出什么詞修飾了,你們懂得)
  • 那么接下來看看陰影效果怎么實(shí)現(xiàn)吧

  • 先簡單分析一下,我們最上面的效果圖,我們其實(shí)可以這么理解,他也是分兩層,下層是陰影,上層是顏色,只不過相對下層來說,我們需要讓他的上層往內(nèi)偏移一定量
  • 感覺就沒啥難理解的了吧,直接上代碼
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    
    <!--陰影層-->
    <item>
        <!--shape為陰影層的樣式-->
        <shape>

            <gradient
                android:angle="270"
                android:endColor="#0F000000"
                android:startColor="#0F000000" />
            <!--這里主要是四個角弧度-->
            <corners
                android:bottomLeftRadius="6dip"
                android:bottomRightRadius="6dip"
                android:topLeftRadius="6dip"
                android:topRightRadius="6dip" />
        </shape>
    </item>


    <!--上層-->
    <!--上層要向內(nèi)偏移一定的距離,才能有陰影的效果-->
    <item
        android:left="1dp"
        android:top="1dp"
        android:right="1dp"
        android:bottom="5dp">

        <!--shape為上層的樣式-->
        <shape>
            <!--這里雖然都寫的是漸變色,但是并沒有寫出色差,所以這里并沒有效果-->
            <gradient
                android:angle="270"
                android:endColor="#FFFFFF"
                android:startColor="#FFFFFF" />

            <!--這里主要是四個角弧度,要注意的是必須與
            陰影層的弧度相同,不然可就不符合大自然規(guī)律了-->
            <corners
                android:bottomLeftRadius="6dip"
                android:bottomRightRadius="6dip"
                android:topLeftRadius="6dip"
                android:topRightRadius="6dip" />
        </shape>
    </item>
    
</layer-list>

  • 這里再也沒啥說的,要注意的是陰影層和上層的shape樣式要一樣,符合陰影的規(guī)律
  • 當(dāng)然這里也可以是別的樣式,只要你做出來感覺好看,咋樣都成,重點(diǎn)是這里的layer-list的item分層思想
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容