Как центрировать ImageView на краю карты?

У меня такой макет:

Мой xml для этого макета:

<?xml version = "1.0" encoding = "utf-8"?>
<ScrollView
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:fillViewport = "true"
tools:context = ".view.testviews.ProfileFragment"
android:background = "@color/colorDarkGrey">
<LinearLayout
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:orientation = "vertical">

    <androidx.cardview.widget.CardView
        android:layout_width = "match_parent"
        android:layout_height = "150dp"
        android:layout_marginStart = "20dp"
        android:layout_marginTop = "100dp"
        android:layout_marginEnd = "20dp"
        app:cardCornerRadius = "16dp">
        <FrameLayout
            android:layout_gravity = "center_horizontal"
            android:layout_width = "100dp"
            android:layout_height = "100dp"
            android:layout_marginTop = "-50dp">

            <de.hdodenhof.circleimageview.CircleImageView
                android:id = "@+id/profile_image"
                android:layout_width = "match_parent"
                android:layout_height = "match_parent"
                android:layout_gravity = "center_horizontal"
                android:src = "@drawable/user_image_placeholder"
                app:civ_border_color = "#FF000000"
                app:civ_border_width = "2dp">
            </de.hdodenhof.circleimageview.CircleImageView>

        </FrameLayout>
    </androidx.cardview.widget.CardView>
</LinearLayout>

Я пытаюсь центрировать circleImageView на краю cardView. Но верхняя его часть невидима. Я искал похожие вопросы, но они не соответствовали моим требованиям. Как я могу этого добиться?

Итак, я попробовал решение @PPartisan, и оно сделало его таким:

Код для этого:

<?xml version = "1.0" encoding = "utf-8"?>
<ScrollView
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:fillViewport = "true"
tools:context = ".view.testviews.ProfileFragment"
android:background = "@color/colorDarkGrey">
<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:orientation = "vertical">

    <androidx.cardview.widget.CardView
        android:id = "@+id/cardView2"
        android:layout_width = "match_parent"
        android:layout_height = "150dp"
        android:layout_marginStart = "20dp"
        android:layout_marginTop = "150dp"
        android:layout_marginEnd = "20dp"
        app:cardCornerRadius = "16dp">
    </androidx.cardview.widget.CardView>

    <de.hdodenhof.circleimageview.CircleImageView
        android:id = "@+id/profile_image"
        android:layout_width = "100dp"
        android:layout_height = "100dp"
        android:layout_gravity = "center_horizontal"
        android:layout_marginTop = "90dp"
        android:src = "@drawable/user_image_placeholder"
        app:civ_border_color = "#FF000000"
        app:civ_border_width = "2dp"
        >
    </de.hdodenhof.circleimageview.CircleImageView>


</androidx.coordinatorlayout.widget.CoordinatorLayout>
0
0
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

android:layout_gravity = "center"

Таким образом, ваш макет становится:

<android.support.v7.widget.CardView
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    app:cardCornerRadius = "80dp"
    app:cardElevation = "10dp"
    android:orientation = "vertical">

    <ImageView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_gravity = "center"
        android:src = "@drawable/titelbild280x280"
        />

</android.support.v7.widget.CardView>
Ответ принят как подходящий

Не делайте свой ImageView дочерним элементом CardView, так как он будет обрезан его родителем. Кроме того, при рассмотрении XML порядок отрисовки указывается сверху вниз, что означает, что представления, указанные позже в XML, будут отрисовываться поверх любых представлений, указанных ранее. Это означает, что вы должны сначала нарисовать CardView, а затем CircleImageView. Таким образом, ваша структура макета должна быть:

<CardView.../>
<...CircleImageView.../>

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

Редактировать: Спасибо, Адиния, за указание в комментариях, что также необходимо установить высоту изображения, чтобы оно рисовалось сверху.

Я пробовал это, но это не сработало. Отредактировал вопрос. Вы можете проверить это?

Arda 23.12.2022 10:29

Вам просто нужно также добавить android:elevation = "2dp" к вашему CircleImageView

Adinia 23.12.2022 10:45

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