ConstraintLayout使视图高度x%的兄弟

时间:2018-03-27 13:27:58

标签: android android-constraintlayout android-percentrelativelayout

我想知道Constraintlayout是否可以实现以下目标:

enter image description here

我有一个固定比率(2:1)的图像,并希望它用渐变覆盖,渐变应从图像的底部开始,并将其顶部对齐到图像高度的50%。 据我所知,这是不可能的。 使用指南不起作用,因为它只能与父/布局的百分比一起放置 使用weight只能在链中使用,但因为我需要覆盖两个视图链不能使用,对吧?

3 个答案:

答案 0 :(得分:1)

你可以像下面这样实现:

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ImageView
        android:id="@+id/imageView4"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintDimensionRatio="2:1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@android:color/darker_gray" />

    <View
        android:id="@+id/View_Top"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintDimensionRatio="4:1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@android:color/transparent" />

    <View
        android:id="@+id/View_Bottom"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintDimensionRatio="4:1"
        app:layout_constraintTop_toBottomOf="@id/View_Top"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@android:color/holo_orange_dark" />



    </android.support.constraint.ConstraintLayout>

此处imageView以2:1的比例设置,并在Imageview上方设置2个额外视图,其中View_Top是透明的,View_Bottom是imageview的下半部分,因此您可以在View_Bottom中设置渐变。

在下面的图像中,背景颜色为灰色,您的颜色可以替换为View_Bottom颜色

enter image description here 希望它会帮助你..!

答案 1 :(得分:0)

据我了解,您希望在图像上使用渐变图层。您可以通过为图像设置前景可绘制来实现:

android:foreground="@drawable/gradient-layer"

然后让您的 gradient-layer.xml 类似于

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <gradient
        android:angle="90"
        android:endColor="@color/transparent"
        android:startColor="@color/color1"
        android:type="linear" />
    <corners android:radius="0dp"/>
</shape>

此外,如果您需要更具体的

,可以为渐变添加中间色
android:centerColor="@color/color2"

答案 2 :(得分:0)

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    <android.support.v7.widget.CardView
        android:id="@+id/sibling"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        >
    </android.support.v7.widget.CardView>
    <android.support.v7.widget.AppCompatImageView
        android:id="@+id/view_to_move"
        app:layout_constraintBottom_toBottomOf="@id/sibling"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@id/sibling"
        /></android.support.constraint.ConstraintLayout>

布局所需的其他属性... 重要的两个属性app:layout_constraintBottom_toBottomOf =“ @ id / sibling”和app:layout_constraintTop_toTopOf =“ @ id / sibling” 两者都必须在约束之内。