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