55

任何人都可以向我解釋如何實現一些在CardView中的Google I/O 2014上演示的視覺觸控反饋。Android-L 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> 

回答

164

API 11+

添加android:foreground="?android:attr/selectableItemBackground"CardView元素。

API 9+

添加android:foreground="?selectableItemBackground"CardView元素。


編輯:紋波距中心,而不是從觸摸點始發是known bug, and has been fixed

+0

謝謝,我也不得不移動「安卓的onClick =‘RunSomeMethod’」高達的CardView,但不幸的是我只see'ing從中心動畫的按鈕,而不是我的手指最後一次碰到的地方......我會投你的答案,但我還不能......迄今爲止對此感到抱歉。 – Smiler

+8

是的,你是對的。 'android:clickable =「true」'也可以。根據源自按鈕中心的動畫,我認爲這是一個錯誤。 – nhaarman

+0

很高興知道:)。再次感謝您的幫助Niek :)。 – Smiler

33

要繪製的選擇上預棒棒糖後棒棒糖正確,你可以用下面的辦法(的想法是使用插圖繪製選擇與圓潤角落預棒棒糖 - 下面的示例使用自定義顏色,你可以改變它們默認)

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> 

前棒棒堂

繪製/ 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> 
+4

我認爲這應該是「正確的答案」。它完全炒作。謝謝! –

+0

不幸的是,這會影響到forefround,所以它覆蓋了cardView的真實內容,而不是與cardView –

+0

@androiddeveloper的背景混合,如果前景不是您正在尋找的內容,您可能需要嘗試: 1)have你的卡片視圖下面的另一個視圖採取相同的空間,但包含內容 2)背景有兩層:第一層 - 卡,第二層 - 卡選擇 – GregoryK

3

這裏是我的解決方案。它使用棒棒糖的波紋+和前棒棒糖設備的靜態前景。

<android.support.v7.widget.CardView 
    ... 
    android:foreground="?android:attr/selectableItemBackground"> 
+0

是不是更好地使用「?attr/selectableItemBackground」?另外,你還會如何爲它添加一個檢查狀態,而不會覆蓋內容? –

11

這在我的情況幫助

背景:

CardView忽略android:background贊成app:cardBackground這隻能是顏色。邊框和陰影實際上是背景的一部分,因此您無法設置自己的背景。

解決方案:

充分利用CardView點擊,而不是卡本身的內部佈局。你已經寫了需要此佈局兩個屬性:

android:clickable="true" 
android:background="?android:selectableItemBackground"