对recyclerview项目的涟漪效应

时间:2016-04-19 13:16:50

标签: android android-recyclerview ripple

我正在使用

android:background="?android:attr/selectableItemBackground"

在触摸回收者视图的项目时添加涟漪效果。 长按单击列表项时,我会显示操作栏。但是该项目不再突出显示。我曾经有一个选择器

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
    <shape>
        <solid android:color="@color/selector"/>
    </shape>
</item>

<item android:state_pressed="true">
    <shape>
        <solid android:color="@color/selector"/>
    </shape>
</item>

<item>
    <shape>
        <solid android:color="@android:color/transparent"/>
    </shape>
</item>
</selector>

作为背景,以突出显示所选项目,但因为我想得到涟漪动画我已经去了selectableItemBackground的东西。 这里有一些帖子显示了如何在具有21个文件扩展名的文件夹中保存涟漪文件。但是,纹波标签仅适用于API Level 21及更高版本。由于我希望设备覆盖范围比api 21级及以上更高,所以我在徘徊是否还有另外一个将我的选择器与波纹的东西结合起来。

由于

2 个答案:

答案 0 :(得分:0)

我找到了一个很好的技巧来解决我使用FrameLayout的问题。

recyclerview项目的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:background="@drawable/selector"
    android:orientation="vertical">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="0dp"
                  android:layout_marginLeft="@dimen/activity_horizontal_margin"
                  android:layout_weight="1"
                  android:gravity="center_vertical"
                  android:orientation="vertical">

        <TextView
            android:id="@+id/name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ellipsize="marquee"
            android:singleLine="true"
            android:textColor="@color/modelTitelColor"
            android:textStyle="bold"/>

        <TextView
            android:id="@+id/objects"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ellipsize="marquee"
            android:singleLine="true"
            android:textColor="@color/cardview_background"
            android:textStyle="normal"/>
    </LinearLayout>


    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="?android:attr/listDivider"/>
</LinearLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?android:attr/selectableItemBackground"/>
</FrameLayout>

诀窍是将选择器设置为内部LinearLayout的背景,并将着名的selectedItemBackground用于FrameLayout中的视图。

答案 1 :(得分:0)

String scriptText = "myarray[1] = 666";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
Bindings bindings = engine.createBindings();
ArrayNode arrayNode = mapper.createArrayNode();
array.add(1);
array.add(2);
array.add(3);

bindings.put("myarray", arrayNode);
engine.eval(scriptText, bindings);