Переместить вид из макета ограничений

Переместить вид из макета ограничений

Я хочу переместить свой ImageView так, чтобы он находился наполовину из ConstraintLayout (родительский) Вы можете себе представить это, когда я делаю отрицательную маржу в своем LinearLayout.

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

Вот часть моего макета.

<android.support.constraint.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:orientation = "vertical">

    <ImageView
        android:layout_width = "71dp"
        android:layout_height = "71dp"
        android:src = "@drawable/someImage"
        app:layout_constraintTop_toTopOf = "parent"/>

</android.support.constraint.ConstraintLayout>

Итак, есть ли хороший способ сделать это?

Как это полезно?

Xenolion 21.03.2018 10:02

Я не уверен, что вы хотите (на полпути к ConstraintLayout)

Raghunandan 21.03.2018 10:04

@Xenolion Я обновил свой ответ

nutella_eater 21.03.2018 10:07

Отвечает ли это на ваш вопрос? Просмотр позиции за пределами ConstraintLayout

Mahozad 14.10.2020 10:48
4
4
2 699
6

Ответы 6

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

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
 xmlns:app = "http://schemas.android.com/apk/res-auto"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:orientation = "vertical">

   <ImageView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:adjustViewBounds = "true"
        android:src = "@drawable/your_image"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintBottom_toBottomOf = "@id/guideline" />

    <android.support.constraint.Guideline
        android:id = "@+id/guideline"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:orientation = "horizontal"
        app:layout_constraintGuide_begin = "163dp" />

</android.support.constraint.ConstraintLayout>

Чтобы расположить ImageView на полпути вне родительского элемента, принудительно установите вертикальные ограничения, установив для layout_height значение 0dp. Чтобы поддерживать соответствующий размер ImageView, установите dimensionRatio на 1:1. Код будет выглядеть следующим образом (обратите внимание, что родительский ConstraintLayout теперь имеет соответствующий родительский layout_height):

<android.support.constraint.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent">

    <ImageView
        android:layout_width = "71dp"
        android:layout_height = "0dp"
        android:src = "@drawable/someImage"
        app:layout_constraintBottom_toTopOf = "parent"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent"
        app:layout_constraintDimensionRatio = "1:1"/>
</android.support.constraint.ConstraintLayout>

Итак, я нашел решение. В основном вам нужно сделать перевод изображения из его контейнера.

android:translationY = "-22dp"

Поместите изображение внутрь линейного макета.

<LinearLayout....>

    <ImageView..../>

</LinearLayout>

И добавьте атрибут с именем клипДети и сделайте его правда.

Один из приемов - установить отрицательный запас для нужной стороны в самом ConstraintLayout. Для этого требуется, чтобы другие виды, ограничивающие эту сторону, были смещены. Правая кнопка на изображениях находится под ConstraintLayout и скрыта под нижней панелью:

<?xml version = "1.0" encoding = "utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    ...
    android:layout_marginBottom = "-48dp">

    <ImageButton
        android:id = "@+id/leftButton"
        android:layout_width = "48dp"
        android:layout_height = "48dp"
        android:layout_marginEnd = "24dp"
        android:layout_marginBottom = "72dp"
        android:background = "@drawable/shape_next_button"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintEnd_toEndOf = "parent" />

    <ImageButton
        android:id = "@+id/rightButton"
        android:layout_width = "48dp"
        android:layout_height = "48dp"
        android:layout_marginStart = "24dp"
        android:background = "@drawable/shape_previous_button"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintStart_toStartOf = "parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Я сделал это, добавив View в ConstraintLayout и придав ему некоторый запас.

View предоставляет фон для ConstraintLayout.

ConstraintLayout должен иметь прозрачный фон.

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:background = "@drawable/bg_transparent">

    <View
        android:layout_width = "match_parent"
        android:layout_height = "0dp"
        android:layout_marginTop = "38dp"
        android:background = "@drawable/bg_white"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />

    <ImageView/>

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