在android中为图像创建自定义框架
我有一张卡片清单。这些卡片包含图像。因此,我必须为具有底部信息块的图像创建自定义帧 它必须是可定制的,因为我使用它的差异版本几次 我尝试用ImageView创建一个自定义视图组,一个TextView和一个带有角半径的路径,但这很难,因为我无法在ImageView顶部的路径上绘制TextView在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
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并自定义其形状,而不是绘制弯曲的白色背景,你的意思是你将跟踪文本视图的位置?