Перекрытие элементов в recyclerview

Я хочу перекрыть первый элемент вторым элементом в представлении переработчика.

это то, чего я хочу достичь:

Перекрытие элементов в recyclerview

вот как сейчас выглядит мой вид ресайклера:

[Перекрытие элементов в recyclerview]

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

item_rating_layout:

 <?xml version = "1.0" encoding = "utf-8"?>
    <LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
        style = "@style/LayoutHeightWrapWidthMatchStyling"
        android:layout_width = "match_parent"
        android:gravity = "center_horizontal"
        android:orientation = "vertical"
        android:padding = "@dimen/padding_large">

        <TextView
            android:id = "@+id/tvRatingMessage"
            style = "@style/TextStyleNormal.XXLarge"
            android:text = "@string/rating_exp" />

        <RatingBar
            android:id = "@+id/ratingBar"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:layout_margin = "@dimen/margin_medium"
            android:numStars = "5"
            android:progressBackgroundTint = "@color/gray"
            android:stepSize = "1.0"
            android:progressTint = "@color/primaryColor"
            android:rating = "2.5" />

        <TextView
            android:id = "@+id/tvWriteFeedBack"
            style = "@style/TextStyleNormal.XXXLarge.primary"
            android:padding = "@dimen/padding_medium"
            android:text = "Write Feedback"
            android:visibility = "gone" />

    </LinearLayout>

item_recycler_view:

 <?xml version = "1.0" encoding = "utf-8"?>
    <LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
        xmlns:app = "http://schemas.android.com/apk/res-auto"
        xmlns:tool = "http://schemas.android.com/tools"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:layout_marginStart = "@dimen/margin_24dp"
        android:layout_marginEnd = "@dimen/margin_24dp"
        android:background = "@color/warranty_card_background">

        <androidx.core.widget.NestedScrollView
            android:layout_width = "match_parent"
            android:layout_height = "match_parent"
            android:fillViewport = "true">

            <LinearLayout
                android:layout_width = "match_parent"
                android:layout_height = "match_parent"
                android:background = "@drawable/btn_shap_without_solid_green"
                android:gravity = "center_horizontal"
                android:orientation = "vertical">


                <ImageView
                    android:id = "@+id/ivProductImage"
                    android:layout_width = "100dp"
                    android:layout_height = "100dp"
                    android:layout_marginTop = "@dimen/margin_medium"
                    android:scaleType = "fitXY"
                    app:srcCompat = "@drawable/ic_original_placeholder" />

                <TextView
                    android:id = "@+id/tvName"
                    style = "@style/TextStyleNormal.XXLarge.black"
                    android:textStyle = "bold"
                    tool:text = "Steelbird Air" />

                    <TextView
                        android:id = "@+id/tvModel"
                        style = "@style/TextStyleNormal.XXLarge"
                        tool:text = "SBA-2 Horn Matt Black With Red " />

                <TextView
                    android:id = "@+id/tvId"
                    style = "@style/TextStyleNormal.XXLarge.gray"
                    android:text = "@string/product_id" />

                <TextView
                    android:id = "@+id/tvViewProductDetails"
                    style = "@style/TextStyleNormal.XLarge.primary"
                    android:text = "View product Details" />

                <androidx.recyclerview.widget.RecyclerView
                    android:id = "@+id/rvWarrantyCard"
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:layout_marginStart = "@dimen/margin_medium"
                    android:layout_marginBottom = "@dimen/margin_medium">

                </androidx.recyclerview.widget.RecyclerView>
            </LinearLayout>
        </androidx.core.widget.NestedScrollView>
    </LinearLayout>

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

Pawel 28.05.2019 13:50
0
1
2 588
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Использовать основной макет Относительный, в противном случае макет кадра

Вы можете использовать следующие ItemDecoration:

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

  }
}

Теперь, когда вы добавите вышеуказанное украшение, ваш следующий ряд будет нарисован поверх предыдущего ряда. Чтобы исправить это, сделайте свой recyclerview обратным, используя setReverseLayout(true)

Вы можете обратиться к мой вопрос, у которого почти такое же требование.

Ответ принят как подходящий

Я каким-то образом исправил свою проблему, просто добавив немного того же цвета, что и фон панели рейтинга внизу первого элемента.

теперь вот окончательный вид xml:

item_recycler_view:

<?xml version = "1.0" encoding = "utf-8"?>

<FrameLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tool = "http://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content">

    <LinearLayout
        android:id = "@+id/llOverlapView"
        android:layout_width = "match_parent"
        android:layout_height = "50dp"
        android:layout_gravity = "bottom"
        android:background = "@color/rating_bar"
        android:orientation = "vertical"/>

        <androidx.core.widget.NestedScrollView
            android:layout_width = "match_parent"
            android:layout_height = "match_parent"
            android:layout_marginStart = "@dimen/margin_24dp"
            android:layout_marginEnd = "@dimen/margin_24dp"
            android:fillViewport = "true">

            <LinearLayout
                android:layout_width = "match_parent"
                android:layout_height = "match_parent"
                android:background = "@drawable/btn_shap_without_solid_green"
                android:gravity = "center_horizontal"
                android:orientation = "vertical">


                <ImageView
                    android:id = "@+id/ivProductImage"
                    android:layout_width = "100dp"
                    android:layout_height = "100dp"
                    android:layout_marginTop = "@dimen/margin_medium"
                    android:scaleType = "fitXY"
                    app:srcCompat = "@drawable/ic_original_placeholder" />

                <TextView
                    android:id = "@+id/tvName"
                    style = "@style/TextStyleNormal.XXLarge.black"
                    android:textStyle = "bold"
                    tool:text = "Steelbird Air" />

                <TextView
                    android:id = "@+id/tvModel"
                    style = "@style/TextStyleNormal.XXLarge"
                    tool:text = "SBA-2 Horn Matt Black With Red " />

                <TextView
                    android:id = "@+id/tvId"
                    style = "@style/TextStyleNormal.XXLarge.gray"
                    android:text = "@string/product_id" />

                <TextView
                    android:id = "@+id/tvViewProductDetails"
                    style = "@style/TextStyleNormal.XLarge.primary"
                    android:text = "View product Details" />

                <androidx.recyclerview.widget.RecyclerView
                    android:id = "@+id/rvWarrantyCard"
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:layout_marginStart = "@dimen/margin_medium"
                    android:layout_marginBottom = "@dimen/margin_medium">

                </androidx.recyclerview.widget.RecyclerView>
            </LinearLayout>
        </androidx.core.widget.NestedScrollView>
</FrameLayout>

Большое спасибо @Pawel

Другие вопросы по теме