问题描述
在MotionLayout
过渡期间,使用自定义视图遇到了不良行为。此自定义视图绘制了Path
,导致底部弯曲。当我在MotionLayout
的过渡期间更改视图的底部约束时,该曲线不会在过渡期间绘制,而只会在过渡完成后重新出现。我在底部尝试了不同的路径,包括一个更简单的三角形,但发生了相同的行为。
以下是Motion Editor
播放过渡音的屏幕录像的链接:
https://imgur.com/a/PdzJAnO
请注意如何正确绘制第一次曲线,但在随后的过渡中,该曲线消失了,直到最终在过渡结束时重新出现。这仅发生在Motion Editor
上,在物理设备上,过渡期间永远不会正确绘制曲线。
我的自定义视图:
class CustomBackgroundView @JvmOverloads constructor(
context: Context,attrs: AttributeSet? = null,defStyleAttr: Int = 0
) : View(context,attrs,defStyleAttr) {
private val path: Path = Path()
private val paint: Paint = Paint().apply {
isAntiAlias = true
isDither = true
style = Paint.Style.FILL
}
private var pathInset: Int = resources.getDimensionPixelSize(R.dimen.default_padding)
init {
if (attrs != null) {
val typedArray = context.obtainStyledAttributes(attrs,R.styleable.CurvedBackgroundView)
typedArray.use { array ->
pathInset = array.getDimensionPixelSize(
R.styleable.CurvedBackgroundView_pathInset,resources.getDimensionPixelSize(R.dimen.default_padding)
)
paint.color = array.getColor(
R.styleable.CurvedBackgroundView_pathColor,ContextCompat.getColor(context,R.color.green)
)
}
}
}
override fun onSizeChanged(w: Int,h: Int,oldw: Int,oldh: Int) {
super.onSizeChanged(w,h,oldw,oldh)
calculatePath(w.toFloat(),h.toFloat())
}
private fun calculatePath(viewWidth: Float,viewHeight: Float) {
with(path) {
moveTo(0F,0F)
lineTo(viewWidth,viewHeight - pathInset)
cubicTo(
viewWidth * FIRST_CONTROL_OFFSET,viewHeight,viewWidth * SECOND_CONTROL_OFFSET,0F,viewHeight - pathInset
)
close()
}
}
override fun draw(canvas: Canvas) {
super.draw(canvas)
canvas.drawColor(Color.TRANSPARENT)
canvas.drawPath(path,paint)
}
companion object {
private const val FIRST_CONTROL_OFFSET = 0.7F
private const val SECOND_CONTROL_OFFSET = 0.3F
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)