Android-L CardView Visual Touch Обратная связь
кто-нибудь может объяснить мне, как реализовать некоторые из визуальных обратных связей, которые были продемонстрированы в Google I/O 2014 в CardView.
Вот как я использую CardView в XML, возможно, что-то маленькое, что мне не хватает, поэтому я просто задавался вопросом, может ли кто-нибудь помочь мне?
<!-- A CardView -->
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/CardView_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
card_view:cardCornerRadius="4dp"
android:elevation="2dp">
<LinearLayout
android:id="@+id/LinearLayout_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:onClick="RunSomeMethod"">
<!-- Main CardView Content In Here-->
</LinearLayout> </android.support.v7.widget.CardView>
Ответы
Ответ 1
API 11 +:
Добавьте android:foreground="?android:attr/selectableItemBackground"
к вашему элементу CardView
.
API 9 +:
Добавьте android:foreground="?selectableItemBackground"
в ваш элемент CardView
.
Изменить: пульсация, происходящая из центра, а не от точки касания, является известной ошибкой и исправлена .
Ответ 2
Чтобы правильно нарисовать выделение на pre-Lollipop и post-Lollipop, вы можете использовать следующий подход (идея заключается в использовании вставки. селектора с закругленными углами для pre-Lollipop - пример ниже использует пользовательские цвета, вы можете изменить их по умолчанию):
android:foreground="@drawable/card_foreground"
пост-леденец
вытяжке-V21/card_foreground.xml
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#20000000"
android:drawable="@drawable/card_foreground_selector" />
вытяжке-V21/card_foreground_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#18000000"/>
</shape>
</item>
<item android:state_focused="true" android:state_enabled="true">
<shape android:shape="rectangle">
<solid android:color="#0f000000"/>
</shape>
</item>
</selector>
предварительно леденец
drawable/card_foreground.xml(вам нужно настроить значения вставки в соответствии с увеличением вашей карты)
<inset xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/card_foreground_selector"
android:insetLeft="2dp"
android:insetRight="2dp"
android:insetTop="4dp"
android:insetBottom="4dp"/>
вытяжка/card_foreground_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#18000000"/>
<corners android:radius="@dimen/card_radius" />
</shape>
</item>
<item android:state_focused="true" android:state_enabled="true">
<shape android:shape="rectangle">
<solid android:color="#0f000000"/>
<corners android:radius="@dimen/card_radius" />
</shape>
</item>
</selector>
Ответ 3
Это помогло в моем случае
Фон:
CardView
игнорирует android:background
в пользу app:cardBackground
, который может быть только цветным. Граница и тень на самом деле являются частью фона, поэтому вы не можете установить свой собственный.
Решение:
Сделайте макет внутри CardView
кликабельным, а не самой картой. Вы уже писали оба атрибута, необходимые для этого макета:
android:clickable="true"
android:background="?android:selectableItemBackground"
Ответ 4
Вот мое решение. Он использует пульсацию для леденца + и статического переднего плана для предустановленных устройств.
<android.support.v7.widget.CardView
...
android:foreground="?android:attr/selectableItemBackground">