使 recyclerview 单元格中的视图浮动在前一个单元格上方

Make a view in recyclerview cell float above a previous cell

我正在使用 RecyclerView 来显示视频列表。

列表中的每一项在 RelativeLayout 中包含 Video 和 SeekBar(以及更多实际但与此处无关的内容),如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/performance"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.my.company.VideoView
        android:id="@+id/the_video"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:keepScreenOn="true"
        android:scaleType="fitCenter" />

    <SeekBar
        android:id="@+id/the_seekbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:alpha="1.0"
        android:maxHeight="@dimen/seekbar_height"
        android:minHeight="@dimen/seekbar_height"
        android:padding="0dp"
        android:progressDrawable="@drawable/my_progressbar"
        android:thumb="@drawable/my_progressbar_circle"
        android:translationY="-5dp" />
</RelativeLayout> 

如您所见,我添加了一个 android:translationY 属性,它使 SeekBar 向上一点,因此它会部分位于前一个单元格的顶部,即上一个视频.

但是它仍然部分隐藏。我只能看到它声明的 RelativeLayout 中的部分。 我尝试在搜索栏和 RelativeLayout(性能)本身上调用 bringToFront() - 但这没有帮助。

这个问题可能与 RecyclerView 无关。在 android 开发中有点新,我不确定我是否可以放置一个在 RelativeLayout 内声明的视图以显示在其边界之外。

希望我说清楚了,需要你的帮助。发送.

默认情况下,每个视图都被裁剪为其父级大小。

您可以尝试通过在 RelativeLayout XML 属性中添加以下内容来禁用此剪裁:

android:clipChildren="false"
android:clipToPadding="false"

或在代码中

viewGroup.setClipChildren(false);
viewGroup.setClipToPadding(false);

在您的情况下,RecyclerView 或 LinearLayoutManager 似乎认为前面的项目应该显示在后面的项目之上。一种方法是使用 RecycleView 装饰来重叠 :

    recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
        private final static int vertOverlap = -10;// TODO : do not forget to convert dp in pixels

        @Override
        public void getItemOffsets (Rect outRect, View view, RecyclerView parent,       RecyclerView.State state) {

            outRect.set(0, vertOverlap, 0, 0);
        }
    });

因此,您不需要在 SeekBar 上使用 translationY,而是向 VideoView 添加一些 paddingTop :

android:paddingTop="5dp"

那样的话,我认为您可以在需要时隐藏 SeekBar,单元格重叠将不可见。

按照相同案例的答案,唯一不同的是它与 Recycleview 的下一项重叠