首页 > 解决方案 > 如何在android中创建s曲线布局

问题描述

如何创建布局或视图,如附加图像、可用于 ImageView、Slider 等的形状。

标签: androidandroid-layoutandroid-xmlcurveandroiddesignsupport

解决方案


你可以使用类似的东西。

    <FrameLayout
        android:clipChildren="false"
        android:clipToPadding="false"
        ...>

        <ImageView/>

        <com.google.android.material.card.MaterialCardView
            android:id="@+id/card"
            android:layout_marginTop="xxdp"
            app:cardCornerRadius="48dp"
            app:cardBackgroundColor="@color/colorSecondaryLight"
            .../>

    </FrameLayout>

然后应用ShapeAppearanceModel

    val cardView = findViewById<MaterialCardView>(R.id.card)

    cardView.shapeAppearanceModel = cardView.shapeAppearanceModel.toBuilder()
        .setTopLeftCorner(CustomCornerTreatment())
        .setBottomLeftCorner(CornerFamily.ROUNDED, 0f)
        .setBottomRightCorner(CornerFamily.ROUNDED, 0f)
        .build()

有这样的习惯CornerTreatment

class CustomCornerTreatment : CornerTreatment() {

    override fun getCornerPath(
        shapePath: ShapePath,
        angle: Float,
        interpolation: Float,
        radius: Float
    ) {

        val interpolatedRadius = radius * interpolation
        shapePath.reset(0f, -radius * interpolation, 270f,270 -angle)
        shapePath.addArc(
            0f,
            -2*interpolatedRadius,
            2*interpolatedRadius,
            0f,
            180f,
            - angle)

    }
}

在此处输入图像描述


推荐阅读