Android L 在 Pre L 中的高程效果(仅使用高程属性)

2022-09-02 22:40:53

我正在开发一个应用程序,并希望对或任何(!支持库中的 CardView)在 Pre L API 中。但是我无法实现我尝试的是使用的属性,但它没有任何效果(无提升)。ImageViewViewandroid:elevation

我找不到任何API,如果有人指出任何文档来实现Pre L或支持库中的任何片段,我们非常感谢。


答案 1

如果要在3D形状中设置视图,并且是一个好主意。View.setElevation()View.setTranslationZ()

但不幸的是,这两个属性和方法是自Android API 21以来引入的。因此,您不能在 pre-L 或 API 21- 设备上使用它们。

但是,仍然有一种方法可以自定义视图的阴影和轮廓。

视图的背景可绘制对象的边界决定了其阴影的默认形状。轮廓表示图形对象的外部形状,并定义触摸反馈的波纹区域。

请考虑以下视图,该视图由背景可绘制对象定义:

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

背景可绘制对象定义为具有圆角的矩形:

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

视图投射具有圆角的阴影,因为背景可绘制对象定义了视图的轮廓。提供自定义轮廓将覆盖视图阴影的默认形状。

在代码中为视图定义自定义大纲:

  1. 扩展类。ViewOutlineProvider
  2. 重写该方法。getOutline()
  3. 使用该方法将新的大纲提供程序分配给视图。View.setOutlineProvider()

您可以使用类中的方法创建带有圆角的椭圆形和矩形轮廓。视图的默认大纲提供程序从视图的背景中获取大纲。要防止视图投射阴影,请将其轮廓提供程序设置为 。Outlinenull

希望它有所帮助。

P.S.:如果您使用的是Android-design-library,那将是一个好主意。yourAppNs:elevation="4dp"


答案 2
  • ViewCompat.setElevation()/getElevation() 不适用于前棒棒糖。
  • 至少在版本 21.1.1 之前,在支持库中没有任何值得一试的东西
  • 至于自己创建高程效果,请看一下这个

推荐