2014-12-24 8 views
20


Возможно ли совпадение элементов с RecyclerView?
Я стараюсь, что с LinearLayoutManager.
Мои требования такие же, как и в LinearLayoutManager, и мне просто нужно перекрывать элементы внутри сверху вниз. (например, укладчики)Как перекрыть элементы в LinearLayoutManager - RecyclerView (например, карты для укладки)

Я видел some variant с помощью ListView. Итак, я полагаю, что в RecyclerView тоже будет возможно .Но после нескольких исследований, Я чувствую, что у него будет довольно много времени, чтобы реализовать менеджер компоновки и довольно подробно понять это. (Я посмотрел в должности Дэйва о Building Custom LayoutManager)

Итак, теперь я думаю, что я, возможно, просто нужно использовать вариант ListView основанный на моем требовании вместо того, чтобы иметь дело с этим много сложности на заказ Layout Manager.

Но, мне просто нужно сделать предметы внутри, чтобы перекрыться. Я чувствую, что может быть какое-то другое направление, которое я еще не знаю. Pls сообщите мне, если есть помимо вышеперечисленного ListView varient и Менеджер пользовательских макетов.

Я также опубликую свои выводы ниже.

+0

Возможно, вы можете использовать этот проект https://github.com/Diolor/Swipecards? – kphil

ответ

27

Я предполагаю, что вы ищете частичное перекрытие (например, колода карт слегка раздувается). Если это так, это выглядит довольно просто с RecyclerView и пользовательским ItemDecoration. Вот тривиальный пример тот, который перекрывает детали по вертикали 90 пикселей:

public class OverlapDecoration extends RecyclerView.ItemDecoration { 

    private final static int vertOverlap = -90; 

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

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

    } 
} 

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

Добавьте это украшение в RV перед установкой менеджера макета. Я пробовал его с помощью StaggeredGrid, но он должен работать с LinearLayout и Grid LM.

+1

У него странное поведение, в котором отображаются только те предметы, которые можно рисовать целиком. Он не отображает верхнюю часть следующего элемента ниже нижней части самой. – shiami

+2

Я понимаю, что этот ответ может не устраивать всех, но я не понимаю ни слова. Он работает, даже если в качестве примечаний сиамы он не показывает верхнюю часть элемента ниже. Это по-прежнему единственный ответ, который кто-либо предоставил для этого 9-месячного вопроса, и единственный предложенный подход, который не требует специального менеджера макетов. – MojoTosh

+1

Для тех, кто хочет знать, как избежать верхнего элемента, попробуйте что-то вроде: 'final int itemPosition = parent.getChildAdapterPosition (view); if (itemPosition == RecyclerView.NO_POSITION) { return; } ', чтобы получить позицию представления. Пропустите строку 'outRect.set()' для верхнего элемента. –