添加涟漪效果和线分隔线

时间:2017-05-31 09:38:09

标签: android android-recyclerview

我有一个回收者视图,其中的每个项目都表示为线性布局。我正在尝试为每个项目添加涟漪效果。

线性布局看起来像

<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}}没有出现。有人可以说出添加分隔符和涟漪效应的解决方法是什么。

2 个答案:

答案 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>