详解Android Material设计中阴影效果的实现方法

2019-12-10 18:29:58丽君

Customize View Shadows and Outlines  自定义View的阴影和轮廓
View的背影图片的边界确定了阴影的默认图形。轮廓代表一个图形对象的外部形状和定义的用于触摸反馈的波纹区域。
参考:

 <TextView
  android:id="@+id/myview"
  ...
  android:elevation="2dp"
  android:background="@drawable/myrect" />

背景图片可以定义成一个圆角的矩形

 <!-- res/drawable/myrect.xml -->
<shape xmlns:android="http://www.easck.com/apk/res/android"
    android:shape="rectangle">
  <solid android:color="#42000000" />
  <corners android:radius="5dp" />
</shape>

因为背景图片定义了View的轮廓(outline),所以View会投放一个使用了圆角的阴影。提供一个自定义的轮廓重写View的默认阴影图形。
自定义轮廓在代码中:

  • 继承自ViewOutlineProvider
  • 重写getOutline()
  • 使用View.setOutlineProvider(),指派新的轮廓

    使用Outline类的一些方法,创建圆角矩形和椭圆的轮廓。默认的outline provider 包含了View的背影轮廓。阻止一个View的投影,可以设置View的ouline provider 为null。

    Clip Views  裁剪

    剪裁视图使您能够轻松地更改视图的形状。你可以统一裁剪成使用了其他设计元素,或在响应用户输入时改变View的形状。可以裁剪View的外部轮廓区域,使用View.setClipToOutline()或者android:clipToOutline属性。只有矩形、圆形、圆角矩形支持轮廓的裁剪,由Outline.canClip()方法来确定。