web-dev-qa-db-ja.com

透明度のないリップルドローアブルを作成する

RippleDrawableを正しく使用する方法について少し迷っています。

私がこのドローアブルを持っているとしましょう:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
     <item Android:state_pressed="false" Android:state_focused="true" Android:drawable="@color/accent_color_light" />
     <item Android:state_pressed="true" Android:drawable="@color/accent_color_light" />
     <item Android:drawable="@Android:color/white" />
</selector>

つまり、フォーカスまたは押すと水色に変わる無地の白い背景です。

波及効果のある同じ色を取得するにはどうすればよいですか?ビューの境界を超えないようにマスクを使用する必要があると思いますか?

11
Stephane Mathis

私自身の質問に答えるのを忘れました。

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
   Android:exitFadeDuration="@Android:integer/config_shortAnimTime"
   Android:color="@color/my_color" >

   <item Android:id="@Android:id/mask">
       <shape Android:shape="rectangle" >
           <solid Android:color="@Android:color/holo_green_light" />
       </shape>
    </item>

</ripple>

IDが「マスク」のアイテムの色は表示されません。これは、波及効果の形状と境界を示すために使用されます。それがないと、ビューの境界外に出る可能性があります。

25
Stephane Mathis

RippleDrawableはすでにStateListDrawable(つまり、selector)であるため、背景としてリップルドローアブルを使用できます(デフォルトの状態)-次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:color="@color/accent_color_light">
    <item Android:id="@Android:id/mask">
        <color Android:color="@Android:color/white" />
    </item>
    <item Android:drawable="@Android:color/white" />
</ripple>

マスクピースは波紋を制限します(実際には、上記のスニペットから色を差し引いたものと、押されていない背景を設定する最後のAndroid:drawable)は デフォルトのリストセレクター ロリポップで使用されます。

23
ahmedre