使用带有海拔高度和角或半径的Flow的Android约束布局

时间:2019-09-19 14:57:32

标签: android android-layout android-constraintlayout android-cardview android-elevation

是否可以使用Cardview创建具有高程,拐角半径等的约束布局? 约束布局具有一个“ constraintlayout.helper.widget.Flow”,可以很好地打包这些窗口小部件,但不确定是否可以使其看起来类似于Cardview

1 个答案:

答案 0 :(得分:0)

Flow类继承自View类,因此您也可以在Flow中使用高程。

没有类似于CardView的cornerRadius属性。但是您可以创建一个可绘制形状的圆角矩形,并将其设置为Flow的背景。

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/light_image_background"/>
    <corners android:radius="10dp"/>

</shape>

并设置它们的流动方式:

android:background="@drawable/rounded_image_background"
android:elevation="6dp"

在保持统一层次结构的同时,您将拥有一个四舍五入的背景。

其他可能的解决方案是从Flow类扩展并覆盖onDraw以在背景中绘制圆角矩形。会是这样的:

class RoundedFlow @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : Flow(context, attrs, defStyleAttr) {
    
    private val backgroundRect : RectF = RectF(0f, 0f, 200f, 200f) 
    private val backgroundCornerRadius = 20f
    private val backgroundPaint : Paint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
        color = Color.YELLOW
    }

    override fun onDraw(canvas: Canvas?) {
        backgroundRect.set(0f, 0f, measuredWidth.toFloat(), measuredHeight.toFloat())
        canvas?.drawRoundRect(backgroundRect, backgroundCornerRadius , backgroundCornerRadius, backgroundPaint)
    }
}