Android, отображать тень под каждым элементом RecyclerView (без отступов) - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь отобразить тень под элементами RecyclerView, но между элементами нет пробелов .

Я пытаюсь воспроизвести что-то подобное:

Design for an UI

Я реализовал RecyclerView и FlexboxLayout, чтобы элементы занимали все место на экране.

Вот декларация вида переработчика:

<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:listitem="@layout/category_item"
    android:clipToPadding="false"
    android:paddingEnd="20dp"
    android:paddingBottom="20dp"/>

Вот расположение элемента:

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.flexbox.FlexboxLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/itemContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:justifyContent="center"
    android:elevation="8dp"
    >

        <TextView
            android:id="@+id/itemTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawablePadding="20dp"
            android:gravity="center"
            android:textSize="16sp" />

</com.google.android.flexbox.FlexboxLayout>

и метод onBindViewHolder от адаптера:

@Override
public void onBindViewHolder(final CategoryViewHolder holder, int position) {
    if (categories != null) {
        Category category = categories.get(position);
        holder.itemTitle.setText("Lorem ipsum");
        ViewGroup.LayoutParams lp = holder.itemContainer.getLayoutParams();

        holder.itemContainer.setBackgroundResource(category.getColor());

        if (lp instanceof FlexboxLayoutManager.LayoutParams) {
            FlexboxLayoutManager.LayoutParams flexboxLp =
                    (FlexboxLayoutManager.LayoutParams) holder.itemContainer.getLayoutParams();
            flexboxLp.setFlexGrow(1.0f);
        }
    }
}

Вот что я получаю:

My Application Design

Как вы можете видеть, я поместил отступ, чтобы мы могли видеть тень позади, но поскольку между элементами нет места, тень не отображается. Я бы хотел, чтобы shadow отображался на top других элементов.

В противном случае я не знаю, как сделать красивое разделение между элементами, я пробовал с DividerItemDecoration, но он не работает должным образом.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Я нашел решение здесь: https://stackoverflow.com/a/35406689/9434800

Я создал ресурс градиента:

<shape xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:angle="90"
        android:centerColor="@color/c1"
        android:centerY="90%"
        android:endColor="@color/c1_darker"
        android:startColor="@color/c1"
        android:type="linear" />

</shape>

И я установил его в качестве фона моего предмета, так что верхняя часть моих предметов темнее, и кажется, что это тень предметов над ними.

0 голосов
/ 28 апреля 2018

Можно попробовать с нестандартной раскладкой адаптера. В пользовательском макете внизу вы можете указать границы или тень. Это будет работать для вас.

...