我已經構建了一個view名為的自定義類progressCircle,它是一個類似于 snapchat 的圓形進度條——它位于約束布局內,位于圓形按鈕上。
此視圖具有引數angle,從 呼叫時onViewCreated(),如果運行將完美運行
progressCircle.angle = 100f
但是,我正在嘗試為這個 onClick 設定影片。如果我運行相同的代碼,onClick,progressCircle不會出現?!經過反復試驗,我發現在此處更新背景顏色使視圖可見并且已更新。IE;
button.setOnClickListener {
progressCircle.setBackgroundColor(android.R.color.transparent)
progressCircle.angle = 270f
}
這里發生了什么,我該如何解決這個問題,以便我可以正確地制作影片......
編輯:
class ProgressCircle(context: Context, attrs: AttributeSet) : View(context, attrs) {
private val paint: Paint
private val rect: RectF
private val fillPaint: Paint
private val fillRect: RectF
var angle: Float
var startAngle: Float = 0f
init {
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.ProgressCircle)
angle = typedArray.getFloat(R.styleable.ProgressCircle_angle, 0f)
typedArray.recycle()
val offsetAngle = 0f
val color = getColor(context, R.color.outputON)
val strokeWidth = 15f
val circleSize = 276f
paint = Paint().apply {
setAntiAlias(true)
setStyle(Paint.Style.STROKE)
setStrokeWidth(strokeWidth)
setColor(color)
}
rect = RectF(
strokeWidth,
strokeWidth,
(circleSize - strokeWidth),
(circleSize - strokeWidth)
)
fillPaint = Paint().apply {
setAntiAlias(true)
setStyle(Paint.Style.FILL)
setColor(getColor(context, R.color.flat_blue_1))
}
val offsetFill = strokeWidth
fillRect = RectF(
offsetFill,
offsetFill,
(circleSize - offsetFill),
(circleSize - offsetFill)
)
//Initial Angle (optional, it can be zero)
angle = offsetAngle
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
if (getColor(context, R.color.flat_blue_1) > 0) {
canvas.drawArc(rect, 0f, 360f, false, fillPaint)
}
canvas.drawArc(rect, startAngle, angle, false, paint)
}
}
TIA
uj5u.com熱心網友回復:
默認情況下,視圖僅在某些內容發生更改時重繪自身 - 即,當視圖根據View檔案“無效”時:
繪圖是通過遍歷樹并記錄需要更新的任何視圖的繪圖命令來處理的。在此之后,整個樹的繪圖命令被發出到螢屏,被剪裁到新損壞的區域。
如果您希望您的自定義視圖在angle屬性更改時重繪自身,您需要呼叫invalidate():
var angle: Float
set(value) {
// Do the default behavior of setting the value
field = value
// Then call invalidate() to force a redraw
invalidate()
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/420528.html
標籤:
上一篇:Safari:從display:none過渡到display:block時,CSS影片不會第二次啟動
下一篇:Pygame-等待影片完成
