Я хочу переместить свой 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>
Итак, есть ли хороший способ сделать это?
Я не уверен, что вы хотите (на полпути к ConstraintLayout)
@Xenolion Я обновил свой ответ
Отвечает ли это на ваш вопрос? Просмотр позиции за пределами ConstraintLayout
Добавьте направляющую линию и скажите, что ваш 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/>
Как это полезно?