我有一个回收者视图,其中的每个项目都表示为线性布局。我正在尝试为每个项目添加涟漪效果。
线性布局看起来像
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item"
style="@style/ItemStyle"
android:paddingLeft="6dp"
android:descendantFocusability="blocksDescendants">
上述布局中的ItemStyle为
<style name="ItemStyle">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">@drawable/item_background</item>
<item name="android:minHeight">@dimen/item_height</item>
<item name="android:orientation">horizontal</item>
<item name="android:paddingBottom">1dp</item>
<item name="android:paddingRight">1dp</item>
</style>
@ drawable / item_background以
给出<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/primary" />
<item android:state_activated="true" android:drawable="@color/blue" />
<item android:drawable="@drawable/item_divider_background" />
</selector>
问题在于,如果我将android:background
从@drawable/item_background
更改为?attr/selectableItemBackground
,我可以获得涟漪效果,但@drawable/item_divider_background
中提到的行分隔符@drawable/item_background
{1}}没有出现。有人可以说出添加分隔符和涟漪效应的解决方法是什么。
答案 0 :(得分:0)
一种解决方法是使用项目装饰器以编程方式添加分隔符 -
public class MyDecorator extends RecyclerView.ItemDecoration {
private Drawable mDivider;
public MyDecorator(Context context) {
mDivider = ContextCompat.getDrawable(context, org.itm.xoinfo.R.drawable.simpleline);
}
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
int left = parent.getPaddingLeft();
int right = parent.getWidth() - parent.getPaddingRight();
int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = parent.getChildAt(i);
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
int top = child.getBottom() + params.bottomMargin;
int bottom = top + mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
}
并像这样添加它recyclelerView.addItemDecoration(new MyDecorator(this));
对于涟漪效应,只需将?attr / selectableItemBackground添加到回收站视图的布局中。
答案 1 :(得分:0)
您可以尝试使用此库balysv/material-ripple。
在您的gradle中,添加以下行:
compile 'com.balysv:material-ripple:1.0.2'
这是怎么做的:
<com.balysv.materialripple.MaterialRippleLayout
android:id="@+id/ripple"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
style="@style/ItemStyle"
android:text="Layout inside a ripple"/>
</com.balysv.materialripple.MaterialRippleLayout>