У меня такой макет:
Мой 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>
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, так как будет проще использовать такие функции, как рекомендации, для правильного согласования различных видов.
Редактировать: Спасибо, Адиния, за указание в комментариях, что также необходимо установить высоту изображения, чтобы оно рисовалось сверху.
Вам просто нужно также добавить android:elevation = "2dp" к вашему CircleImageView
Я пробовал это, но это не сработало. Отредактировал вопрос. Вы можете проверить это?