55

Android L デベロッパー プレビューの標準ListViewセレクターはcolorControlHighlight、タッチ時の波及効果に使用され、フォーカスされていない状態で透明な背景を持ちます。

ListView色付きの背景を持ち、同じハイライト色でタッチすると波及効果を示すアイテムを定義したいと思います。ここで、次のドローアブルを定義するとします。

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="?android:colorControlHighlight">
    <item android:drawable="@color/my_background_color"/>
</ripple>

ListView機能しますが、タッチ位置に関係なく、波紋はアイテムの中央から始まります。の外部で同じ背景を使用するとListView、たとえば の場合、LinearLayout期待どおりに動作します (リップルはタッチ位置で始まります)。

4

6 に答える 6

127

波及効果を維持しながら、個別に色分けされたリスト アイテムを取得することができました。持っているアダプターを使用してリスト項目の背景を設定し、リストビューを設定してセレクターを一番上に表示します。

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:drawSelectorOnTop="true" />

これにより、背景の上に波紋効果が描画されます。

于 2014-11-20T00:50:31.587 に答える
3

私は@ ArhatBaidの答えを少し適応させ、テストしましたが、完全に機能します:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item android:drawable="@color/light_grey_header_navigation_drawer"/>
</ripple>

したがって、これにより、背景色を設定しても波及効果を維持できます。
私にとって、target と minSdk は 21 です。

于 2015-01-20T11:18:22.923 に答える
3

親レイアウトの背景として波紋効果を含むサンプル レイアウト。

<RelativeLayout 
                android:id="@+id/id4"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/ripple_effect"
                android:clickable="true">

                <ImageView 
                    android:id="@+id/id3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:background="@drawable/image"
                    android:layout_centerVertical="true"/>

                <LinearLayout
                    android:id="@+id/id2" 
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true">

                    <TextView 
                        android:id="@+id/id1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/text"/>

                </LinearLayout>
            </RelativeLayout>

Ripple_effect.xml ここでは、任意の色を使用できます。SDK バージョン 21 を使用し、drawable-v21 および style-v21 フォルダーがあり、v21 に関連するすべてのファイルをそれらに配置していることを確認してください。

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
                  android:color="?android:colorControlHighlight">
    <item android:id="@android:id/mask">
        <shape android:shape="oval">
            <solid android:color="?android:colorAccent" />
        </shape>
    </item>

ここでは、楕円形の代わりに長方形のような別の形状を使用できます...

于 2014-12-26T07:28:49.770 に答える
2

これは、ネストされたレイアウトで実現できます。たとえば、既存のレイアウトの周りにルート レイアウトとして LinearLayout を作成し、ルート レイアウトに波及効果を設定し、背景色をネストされたものに設定します。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/ripple_effect"
    android:orientation="vertical">

    <RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/containterContent"
        android:background="@color/yourCOLOR"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!-- Your content -->

    </RelativeLayout>
</LinearLayout>
于 2015-03-11T09:15:58.600 に答える