Ответ 1
Если вы хотите установить представления в трехмерной форме, 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>
В представлении создается тень с закругленными углами, так как фон drawable определяет контур представления. Предоставление настраиваемого контура отменяет форму по умолчанию тени вида.
Чтобы определить пользовательский контур для представления в вашем коде:
- Расширьте класс
ViewOutlineProvider
. - Переопределить метод
getOutline()
. - Назначьте новому поставщику контуров вашему представлению с помощью
View.setOutlineProvider()
.
Вы можете создавать овальные и прямоугольные контуры с закругленными углами, используя методы класса Outline
. Поставщик контуров по умолчанию для представлений получает контур из фона представления. Чтобы запретить просмотр из тени, установите его провайдер outline null
.
Надеюсь, это поможет.
P.S:.
yourAppNs:elevation="4dp"
будет хорошей идеей, если вы используете андроид-дизайн-библиотеку.