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

时间:2014-10-20 14:28:37

标签: java android android-5.0-lollipop

我正在处理某个应用,并希望在Pre L API中对ImageView或任何View(支持库中的CardView)产生提升效果。但是我无法实现我所尝试的使用android:elevation属性,但它没有任何效果(没有提升)。

我无法找到任何API,如果有人在Pre L中指出要实现此目的的任何文档,或者非常感谢支持库中的任何代码段。

2 个答案:

答案 0 :(得分:2)

如果您想以3D形状设置视图,View.setElevation()View.setTranslationZ()是个好主意。

但遗憾的是,自Android API 21开始引入了这两个属性和方法。因此,您无法在pre-L或API 21设备上使用它们。

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

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

考虑这个视图,用背景drawable定义:

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

背景drawable定义为带圆角的矩形:

<!-- 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>

视图投射带圆角的阴影,因为背景drawable定义了视图的轮廓。提供自定义轮廓会覆盖视图阴影的默认形状。

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

  1. 扩展ViewOutlineProvider类。
  2. 覆盖getOutline()方法。
  3. 使用。将新的大纲提供程序分配给您的视图 View.setOutlineProvider()方法。
  4. 您可以使用Outline类中的方法创建带圆角的椭圆和矩形轮廓。视图的默认大纲提供程序从视图的背景中获取大纲。要防止视图投射阴影,请将其大纲提供程序设置为null

    希望它有所帮助。

    <强> P.S: 如果您使用 android-design-library yourAppNs:elevation="4dp"将是一个好主意。

答案 1 :(得分:1)

  • ViewCompat.setElevation()/ getElevation()在前Lollipop上无效。
  • 在支持库中没有任何值得检查的内容,至少在版本21.1.1
  • 之前
  • 至于自己创造一个提升效果 看一眼 this