在recyclerview单元格浮点上方查看上一个单元格

时间:2016-12-13 16:47:23

标签: android android-layout android-recyclerview android-seekbar

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

列表中的每个项目都在RelativeLayout中保存了视频和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 dev中有些新东西,我不确定我是否可以放置一个在RelativeLayout中声明的视图以显示在其边界之外。

希望我很清楚,需要你的帮助。 TX。

2 个答案:

答案 0 :(得分:1)

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

您可以尝试通过在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上使用translateY,而是在你的VideoView中添加一些paddingTop:

android:paddingTop="5dp"

这样,我认为如果需要你可以隐藏SeekBar,并且不会看到细胞重叠。

答案 1 :(得分:0)

在相同的情况下遵循此答案,区别在于它与Recycleview https://stackoverflow.com/a/40603773/3839498的下一项重叠