如何通過 View 設置陰影
從Android 5.0(API級別21)開始,View提供了一個名為“elevation”的屬性,用于設置陰影的大小。這個屬性可以通過XML或代碼來設置。注意,陰影的大小與View的Z值(elevation)和translationZ屬性有關(guān)。Z值由elevation和translationZ共同決定,通常elevation用于靜態(tài)陰影,而translationZ用于動畫。

xml設置:
<View
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="10dp" />代碼設置:
view.setElevation(20);
//或
view.setTranslationZ(20);在Material Design 設計規(guī)范中,存在兩個光源,一個是點光源, 一個是環(huán)境光,兩種光源共同作用,形成View的陰影效果。默認情況下,陰影是黑色的,然而很多時候我們想讓陰影顏色與 View 本身的顏色一致,達到更好地視覺效果。Android貼心地考慮到這一點,為我們提供了API:setOutlineAmbientShadowColor和setOutlineSpotShadowColor。開發(fā)者可以通過 xml 或 代碼改變陰影的顏色。
「setOutlineAmbientShadowColor」
- 當view 的Z 值或者 elevation 值為正數(shù)時,設置環(huán)境陰影顏色
- 默認陰影是黑色、不透明的,因此陰影的強度在不同顏色的不同視圖之間是一致的
- 最終環(huán)境陰影的不透明度是(陰影投射器高度、outlineAmbientShadowColor的alpha通道(通常為不透明)和R.attr.ambientShadowAlpha 主題屬性)的函數(shù)
xml設置:
android:outlineAmbientShadowColor="#FFAAAA" 代碼設置:
view.setOutlineAmbientShadowColor(mContext.getResources().getColor(R.color.ambient_shadow_color));「setOutlineSpotShadowColor」
- 當view 的Z 值或者 elevation 值為正數(shù)時,設置點陰影顏色
- 默認陰影是黑色、不透明的,因此陰影的強度在不同顏色的不同視圖之間是一致的
- 最終點陰影的不透明度是(陰影投射器高度、outlineAmbientShadowColor的alpha通道(通常為不透明)和R.attr.ambientShadowAlpha 主題屬性)的函數(shù)
xml設置:
android:outlineSpotShadowColor="#BAFDCE" 代碼設置:
view.setOutlineSpotShadowColor(mContext.getResources().getColor(R.color.spot_shadow_color));設置陰影的其他方案:
- 使用自定義視圖和draw方法:如果你想創(chuàng)建更復雜的陰影效果,可以通過擴展View類并重寫onDraw方法來實現(xiàn)。在這個方法中,你可以使用Canvas的drawRect、drawPath等方法來繪制陰影。
public class ShadowView extends View {
private Paint paint;
private int shadowColor = Color.BLACK;
private float shadowRadius = 2f;
private float shadowOffset = -1f;
private float shadowOpacity = 0.9f;
public ShadowView(Context context) {
super(context);
init();
}
private void init() {
paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setColor(shadowColor);
canvas.drawRect(getPaddingLeft(), getHeight() - shadowOffset, getWidth() - getPaddingRight(), getHeight(), paint);
}
}- 使用第三方庫:有些第三方庫可以幫助你更容易地給View添加陰影效果,例如CardView和Material Design庫。這些庫通常提供了更豐富的陰影選項,如顏色、大小和模糊半徑等。
- 使用9-PatchDrawable:創(chuàng)建一個包含陰影的9-PatchDrawable資源,并將其作為View的背景。這種方法適用于固定大小的陰影,例如在按鈕或卡片上添加陰影。





















