在android中为图像创建自定义框架

在android中为图像创建自定义框架,android,android-layout,kotlin,android-imageview,android-custom-view,Android,Android Layout,Kotlin,Android Imageview,Android Custom View,我有一张卡片清单。这些卡片包含图像。因此,我必须为具有底部信息块的图像创建自定义帧 它必须是可定制的,因为我使用它的差异版本几次 我尝试用ImageView创建一个自定义视图组,一个TextView和一个带有角半径的路径,但这很难,因为我无法在ImageView顶部的路径上绘制TextView override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) { imageVie

我有一张卡片清单。这些卡片包含图像。因此,我必须为具有底部信息块的图像创建自定义帧

它必须是可定制的,因为我使用它的差异版本几次

我尝试用ImageView创建一个自定义视图组,一个TextView和一个带有角半径的路径,但这很难,因为我无法在ImageView顶部的路径上绘制TextView

 override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {

    imageView.layout(
        left,
        top,
        right,
        bottom - 50
    )

    textView.layout(
        500, 700,
        600,
        800
    )
}

override fun dispatchDraw(canvas: Canvas?) {
    super.dispatchDraw(canvas)
    canvas!!.drawPath(mBottomShape, mBottomShapePaint)
}

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    viewWidth = MeasureSpec.getSize(widthMeasureSpec)
    viewHeight = MeasureSpec.getSize(heightMeasureSpec)

    val bottom = viewHeight - 50

    mBottomShape.moveTo(viewWidth * 0.47F, bottom.toFloat() * 1.01f)
    mBottomShape.lineTo(viewWidth * 0.53F, bottom * 0.99F)
    mBottomShape.lineTo(viewWidth * 0.55F, bottom * 0.93F)
    mBottomShape.lineTo(viewWidth * 0.7F, bottom * 0.93F)
    mBottomShape.lineTo(viewWidth * 0.72F, bottom * 0.99F)
    mBottomShape.lineTo(viewWidth * 0.78F, bottom.toFloat() * 1.01f)

    mBottomShape.close()

    setMeasuredDimension(viewWidth, viewHeight)
}
我需要达到的目标是:


是的,您可以在顶部绘制
TextView
,只需覆盖
onDraw()
方法,您要绘制的最后一个项目将位于顶部

是的,您可以在顶部绘制
TextView
,只需覆盖
onDraw()
方法和您要绘制的最后一项将位于顶部

但我如何知道texview是通过textview.layout(l、t、r、b)绘制的。因为它的VIEWGROUP通常我会制作自定义的ImageView,覆盖需要留出间隙的图形底部部分,然后将使用约束布局添加带有背景的TextView,这就是你如何实现这种弯曲的白色背景?通过扩展ImageView并自定义其形状,而不是绘制弯曲的白色背景,你的意思是你将跟踪TextView的位置?但我如何知道TextView是通过TextView.layout(l,t,r,b)绘制的。因为它的VIEWGROUP通常我会制作自定义的ImageView,覆盖需要留出间隙的图形底部部分,然后将使用约束布局添加带有背景的文本视图,这就是你如何实现这种弯曲的白色背景?通过扩展ImageView并自定义其形状,而不是绘制弯曲的白色背景,你的意思是你将跟踪文本视图的位置?