如何防止使用 Path() 绘制的自定义视图在调整大小时跳转?

How to prevent custom view drawn with Path() from jumping when being resized?

我创建了一个自定义视图,并使用 Path() 绘制了它的形状。

class CurvedInvertedShape(context: Context, attrs: AttributeSet) : RelativeLayout(context, attrs) {

    private var path: Path? = null
    private var paint: Paint? = null
    private var bottom: Float = 0f

    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
        super.onSizeChanged(w, h, oldw, oldh)

        paint = Paint()
        paint!!.style = Paint.Style.FILL
        paint!!.color = resources.getColor(R.color.light_gray, context.theme)
        path = Path()
        val horizontalOffset = w * .4f

        if (oldh == 0)
            bottom = h.toFloat()

        path!!.arcTo(
            -horizontalOffset,
            0f,
            w.toFloat() + horizontalOffset,
            bottom,
            180f,
            180f,
            false
        )
        path!!.lineTo(w.toFloat(), h.toFloat())
        path!!.lineTo(-horizontalOffset, h.toFloat())
        path!!.fillType = Path.FillType.INVERSE_EVEN_ODD
    }

    override fun onDraw(canvas: Canvas) {
        if (path != null)
            canvas.drawPath(path!!, paint!!)

        super.onDraw(canvas)
    }
}

我的问题是当它的高度发生变化时,自定义视图的底部会从一个高度跳到另一个高度,而不是像其他视图那样平滑地调整大小。

这是我希望它的样子以及实际表现如何的示例:https://imgur.com/a/MZf9rnY

我很确定我需要自己制作动画,因为视图是我制作的,但我找不到怎么做。

好的,所以我不知道我在想什么...基本上我创建了另一个视图,我将其设置为匹配进行更改的布局,而不是直接应用此自定义视图 for 布局本身。以下是简化的示例:

<com.app.MyCustomView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_marginTop="40dp"
    android:background="@drawable/gradient_state_1"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="40dp"
    android:animateLayoutChanges="true"
    android:background="@drawable/gradient_state_1"
    android:orientation="vertical">
    <!--Some views which collapse and expands-->
</LinearLayout>

上面是我做过的和没做过的,下面是我做过的和做过的:

<come.app.MyCustomView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="40dp"
    android:animateLayoutChanges="true"
    android:background="@drawable/gradient_state_1"
    android:orientation="vertical">
    <!--Some views which collapse and expands-->
</com.app.MyCustomView>

我不敢相信我在这方面如此努力,因为我知道我在同一个项目的其他地方也做过同样的事情。我想我是专注于制作动画的方式。