包含ImageView的RecyclerView项目的涟漪效应
我有一个RecyclerView
展开下面的网格项目:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/children_tile_border" android:layout_marginTop="@dimen/children_tile_border" android:clickable="true" android:focusable="true" android:background="?selectableItemBackground" tools:ignore="RtlHardcoded"> <com.example.app.ui.widget.SquareImageView android:id="@+id/child_picture" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" android:layout_alignParentBottom="true"/> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="68dp" android:background="@color/tile_text_background" android:gravity="center_vertical" android:layout_alignParentBottom="true"> .............. </LinearLayout> </RelativeLayout>
但是除非我将SquareImageView's
可见性设置为不可见,否则不会出现涟漪效应。 似乎涟漪效应绘制在SquareImageView
下方。 我怎样才能让它在SquareImageView
绘制?
将以下代码添加到您的父级布局
android:clickable="true" android:focusable="true" android:background="?attr/selectableItemBackground"
如果你想要自定义涟漪效应,请在你的drawable-v21中添加这个ripple_custom.xml
<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/colorHighlight"> <item android:id="@android:id/mask" android:drawable="@color/windowBackground" /> </ripple>
支持旧版本添加ripple_custom.xml中绘制
<?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="rectangle"> <solid android:color="@color/colorHighlight" /> </shape> </item> <item> <shape android:shape="rectangle"> <solid android:color="@android:color/transparent" /> </shape> </item> </selector>
更改:
android:background="?selectableItemBackground"
至:
android:background="?android:attr/selectableItemBackground"
并将其添加到您的SquareImageView
android:clickable="false"
我们可以在FrameLayout
包装RecyclerView Item并设置android:foreground
属性。 详细信息请查看以下链接 。 它适合我很好。
你的SquareImageView
正在填充整个空间( width
是match_parent
, height
是wrap_content
),所以SquareImageView
接收到click事件。
在我的情况下工作是将您的RelativeLayout
的所有对象的可点击的状态设置为false:
android:clickable="false"
只要确保您的RelativeLayout
处理您的活动中的点击事件。 在我的代码中,我将RelativeLayout
设置为一个view v
并在其上设置onClick Listener
来处理我的List项目中的CheckBox
。
v.setOnClickListener(this);
希望这可以帮助读者阅读。
如果你有一个CardView + ImageView
只需插入CardView
android:focusable="true" android:foreground="?android:attr/selectableItemBackground"
而对于RelativeLayout + ImageView
插入RelativeLayout
android:clickable="true" android:focusable="true" android:background="?attr/selectableItemBackground"
要么
android:focusable="true" android:background="?attr/selectableItemBackground"
此代码为我工作