Android 設定控制元件陰影的三種方式

weixin_33782386發表於2017-10-16

第一種方式:elevation

View的大小位置都是通過x,y確定的,而現在有了z軸的概念,而這個z值就是View的高度(elevation),而高度決定了陰影(shadow)的大小。

7508328-3e32937b95b6bb6b

View Elevation(檢視高度)

View的z值由兩部分組成,elevationtranslationZ(它們都是Android L新引入的屬性)
eleavation是靜態的成員,translationZ是用來做動畫。
Z = elevation + translationZ


在layout中使用** android:elevation屬性去定義
在程式碼中使用 View.setElevation 方法去定義
設定檢視的translation,可以使用
View.setTranslationZ方法
新的
ViewPropertyAnimator.zViewPropertyAnimator.translationZ方法可以設定檢視的elevation**值

我們通過設定elevation的值也會達到卡片陰影效果

7508328-fc294ad0a3e742b5.png

第二種方式:CardView

今天有空學習了下CardView的使用,既然是使用,不凡使用一個例項操作一下

CardView是Android5.0的新控制元件,所以我們需要在dependencies中新增支援:
compile 'com.android.support:cardview-v7:26.0.0'

CardView是繼承FrameLayout的一個佈局控制元件,從原始碼可以看出CardView支援的屬性有:

  • card_view:cardElevation 陰影的大小

  • card_view:cardMaxElevation 陰影最大高度

  • card_view:cardBackgroundColor 卡片的背景色

  • card_view:cardCornerRadius 卡片的圓角大小

  • card_view:contentPadding 卡片內容於邊距的間隔

    • card_view:contentPaddingBottom
    • card_view:contentPaddingTop
    • card_view:contentPaddingLeft
    • card_view:contentPaddingRight
    • card_view:contentPaddingStart
    • card_view:contentPaddingEnd
  • card_view:cardUseCompatPadding 設定內邊距,V21+的版本和之前的版本仍舊具有一樣的計算方式

  • card_view:cardPreventConrerOverlap 在V20和之前的版本中新增內邊距,這個屬性為了防止內容和邊角的重疊

我們看一下今天要實現的效果圖:

7508328-fa2d056a53e845b2

有興趣的朋友可以嘗試使用ViewPager+CardView實現卡片畫廊的效果

其實CardView的使用相當於加了一個佈局使用,其CardView裡面內容的實現,還是在佈局中設計
銀行卡布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:padding="16dp">

    <android.support.v7.widget.CardView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="180dp"
        app:cardBackgroundColor="#099A8C"
        app:cardCornerRadius="10dp"
        app:cardElevation="10dp"
        app:contentPadding="16dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:background="@drawable/icon_01" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:orientation="vertical"
                android:padding="8dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="中國農業銀行"
                    android:textColor="#ffffff"
                    android:textSize="18sp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="儲蓄卡"
                    android:textColor="#ffffff"
                    android:textSize="16sp" />
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:textColor="#ffffff"
                    android:gravity="center_vertical"
                    android:textSize="22sp"
                    android:text="**** **** **** 1234"/>
            </LinearLayout>

            <ImageView
                android:layout_width="60dp"
                android:layout_height="15dp"
                android:background="@drawable/icon_02" />
        </LinearLayout>
    </android.support.v7.widget.CardView>

</RelativeLayout>

特別注意的是:使用CardView的屬性時,記得加上名稱空間的宣告
xmlns:app="http://schemas.android.com/apk/res-auto

第三種方式:最強按鈕通過Color來進行設定

自認為這是按鈕最好看的效果,還自帶按下效果,設定也非常簡單,秒殺一切陰影效果,我們先來看下他的效果

未按下效果

7508328-b7767a3c5233d300.png

按下效果

7508328-9ff4bcf8e0b80e8b.png

其實這種效果非常簡單,就是定義了一個顏色。對就是一個顏色就可以達到這種效果
那這個顏色要怎麼定義才能達到這種效果呢

比如上圖的按鈕顏色是粉紅色,顏色程式碼 #f692bf,我們只需要在前面加上#ff,最後這樣#ff692bf 就可以達到這種效果

相關文章