我正在处理某个应用,并希望在Pre L API中对ImageView
或任何View
(支持库中的CardView)产生提升效果。但是我无法实现我所尝试的使用android:elevation
属性,但它没有任何效果(没有提升)。
我无法找到任何API,如果有人在Pre L中指出要实现此目的的任何文档,或者非常感谢支持库中的任何代码段。
答案 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定义了视图的轮廓。提供自定义轮廓会覆盖视图阴影的默认形状。
在代码中为视图定义自定义大纲:
ViewOutlineProvider
类。getOutline()
方法。View.setOutlineProvider()
方法。您可以使用Outline
类中的方法创建带圆角的椭圆和矩形轮廓。视图的默认大纲提供程序从视图的背景中获取大纲。要防止视图投射阴影,请将其大纲提供程序设置为null
。
希望它有所帮助。
<强> P.S:强>
如果您使用 android-design-library ,yourAppNs:elevation="4dp"
将是一个好主意。
答案 1 :(得分:1)