版权声明:本文为博主原创文章,转载指明原处 https://blog.csdn.net/qq_36043263/article/details/81876584
elevation与translationZ
二者都有控件在Z轴上高度的意思,区别是elevation可在XML以及代码中调用View.setElevation()实现,而translationZ只能用于动画实现。
如何体现出阴影效果? 两种方案
background图层含有< shape >所绘制的内容
比如这样
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#666666" />
<corners android:radius="5dp" />
</shape>
亦或者这样
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid
android:color="@android:color/holo_red_dark"
android:shape="rectangle" />
<corners android:radius="5dp" />
</shape>
</item>
<item android:drawable="@drawable/ic_launcher_background" />
</layer-list>
最后放进background即可。
ViewOutlineProvider
用于阴影投射与剪裁的一个类,投射后的形状由我们自定义,阴影会产生在这个形状的周围,并随控件状态的改变而改变。
ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() {
@SuppressLint("NewApi")
@Override
public void getOutline(View view, Outline outline) {
Rect rect = new Rect(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
outline.setRect(rect);
}
};
这里投射了一个矩形,以View控件的左上角为参考点。我们可以更改阴影的弧度,形状,自行挖掘。
最后调用:
view.setOutlineProvider(viewOutlineProvider);
即可部署。