使 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 的下一项重叠
我正在使用 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 的下一项重叠