涟漪与透明背景的形状

我在我的应用程序中使用以下形状

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="oval" > <solid android:color="@color/primary_light"/> <size android:height="80dp" android:width="80dp"/> </shape> </item> <item android:state_focused="true"> <shape android:shape="oval"> <stroke android:color="@color/primary_light" android:width="5dp"/> <size android:height="80dp" android:width="80dp"/> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="@android:color/transparent"/> <size android:height="80dp" android:width="80dp"/> </shape> </item> </selector> 

它在我的可绘制文件夹中。 现在我正在更新我的应用程序棒棒糖,我希望给我使用的圆形button的波纹反馈。 所以在drawable-v21文件夹中,我将其更改为纹波select器:

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/primary_light"> <item> <selector> <item android:state_focused="true"> <shape android:shape="oval"> <stroke android:color="@color/primary_light" android:width="5dp"/> <size android:height="80dp" android:width="80dp"/> </shape> </item> <item android:id="@android:id/mask"> <shape android:shape="oval"> <solid android:color="@android:color/transparent"/> <size android:height="80dp" android:width="80dp"/> </shape> </item> </selector> </item> </ripple> 

但不幸的是,在棒棒糖中使用上面的drawable并不会产生连锁效应。 是因为<solid android:color="@android:color/transparent"/>

任何人都可以告诉我我哪里出了错? 谢谢

Solutions Collecting From Web of "涟漪与透明背景的形状"

经过一些试验和错误,似乎我误解了selectoritem的层次结构。

以下工作完美。

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/primary_light"> <item android:id="@android:id/mask"> <shape android:shape="oval"> <solid android:color="@android:color/white"/> <size android:height="80dp" android:width="80dp"/> </shape> </item> </ripple> 

这在透明的背景下工作:

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorControlHighlight" android:exitFadeDuration="@android:integer/config_shortAnimTime"> <!-- Use this to define the shape of the ripple effect (rectangle, oval, ring or line). The color specified here isn't used anyway --> <item android:id="@android:id/mask"> <shape android:shape="rectangle"> <corners android:radius="3dp"/> <!-- This color is needed to be set - doesn't affect anything --> <solid android:color="@android:color/white"/> </shape> </item> <!-- This is the background for your button --> <item> <!-- Use the shape you want here --> <shape android:shape="rectangle"> <!-- Use the solid tag to define the background color you want --> <solid android:color="@android:color/transparent"/> </shape> </item> </ripple> 

这是从这个答案修改了一下: 透明波纹

以下代码适用于透明button的涟漪效应自定义形状 –

main_activity_buttons_ripple_with_background.xml

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:color="#888888" tools:targetApi="lollipop"> <!-- Use this to define the shape of the ripple effect (rectangle, oval, ring or line). The color specified here isn't used anyway --> <item android:id="@android:id/mask"> <shape android:shape="rectangle"> <corners android:radius="25dp" /> <!-- This color is needed to be set - doesn't affect anything --> <solid android:color="#000" /> </shape> </item> <!-- This is the background for your button --> <item> <!-- Use the shape you want here --> <shape android:shape="rectangle"> <!-- Use the solid tag to define the background color you want --> <solid android:color="@android:color/transparent" /> <stroke android:width="1dp" android:color="#FFF" /> <corners android:radius="25dp" /> </shape> </item> </ripple> 

styles.xml

 <style name="MainActivityButtonsStyle"> <item name="android:background">@drawable/main_activity_buttons_ripple_with_background</item> <item name="android:textAllCaps">false</item> <item name="android:layout_margin">15dp</item> <item name="android:paddingLeft">20dp</item> <item name="android:paddingRight">20dp</item> <item name="android:layout_centerHorizontal">true</item> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">50dp</item> <item name="android:textColor">#FFF</item> <item name="android:textSize">18sp</item> 

activity_main.xml中

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> <Button android:layout_alignParentTop="true" style="@style/MainActivityButtonsStyle" android:text="@string/button_search_by_id" /> </RelativeLayout> </LinearLayout>