0

Я использую RecyclerView, чтобы показать список видео.Сделайте вид в ячейке recyclerview float над предыдущей ячейкой

Каждый элемент в списке имеет видео и SeekBar (и больше вещей на самом деле, но не имеет значения здесь) в RelativeLayout следующим образом:

<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, в которой она объявлена. Я пробовал звонить bringToFront() на стрелку и на RelativeLayout (исполнение), но это не помогло.

Возможно, вопрос не относится только к RecyclerView. Будучи несколько новым в Android-разработчике, я не уверен, могу ли я разместить представление, которое объявлено внутри RelativeLayout, появляться за пределами его границ.

Надеюсь, что я был чист, вам нужна ваша помощь. Tx.

ответ

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); 
     } 
    }); 

Таким образом, вам не нужно будет использовать translationY на вашем SeekBar, а добавить некоторые paddingTop к вашему VideoView:

android:paddingTop="5dp" 

Таким образом, , Я думаю, вы могли бы спрятать SeekBar, если это необходимо, и перекрытие ячеек не будет видно.

+0

Это не помогло. Я попытался добавить его в RelativeLayout, а затем к самому файлу поиска, а также к охватывающему виду ресайклеров и различным комбинациям. SeekBar все еще частично скрыт над представлением над ним. – drorsun

+0

Думаю, вы используете LinearLayoutManager для своего RecyclerView. По какой-то причине LinearLayoutManager считает, что элементы в начале могут перекрывать следующие элементы. Я знаю, что это не то, что вы намеревались, но вы можете использовать OverlapDecoration, чтобы этого избежать. –

+0

ОК, я отвлек внимание на другие проблемы, но теперь вернулся к этому и пересмотрел это решение. Оно работает! определенно мне нужен был декоратор, и в моем макете потребовалась некоторая настройка с помощью панели поиска, но она работает. Благодаря! – drorsun

0

Следуйте этот ответ с таким же случае только разница в том, что перекрывается следующий пункт Recycleview https://stackoverflow.com/a/40603773/3839498

+0

Спасибо, AFAICS изменение использует clipToPadding = "false" - и это не помогло. В этом вопросе он использует OverlapDecoration, который не является чем-то, что я хочу сделать, поскольку мне нужно, чтобы поисковый барабан появлялся только тогда, когда мне нужно было играть в видео, поэтому постоянное перекрытие не подходит для моего дела. Может быть, я все еще пропущу что-то из вашего ответа на этот ответ? – drorsun

+0

вы также можете изменить время выполнения. пожалуйста, поделитесь снимком экрана, чтобы я мог лучше помочь –