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