
控件寬高 w=h,圓心 (cx,cy)。對號三點:
P0 = (r/2 + padL, r + padT) // 起點
P1 = (5r/6 + padL, 4r/3 + padT) // 轉折點
P2 = (1.5r + padL, 2r/3 + padT) // 終點
r = h/2
progress ∈ [0,1]:progress < 1/3:繪製 P0→P1 第一段,長度按比例progress ≥ 1/3:第一段全繪,第二段 P1→P2 按比例繪製三個 ValueAnimator 串聯:
showCheck:半徑放大 0→1showCorrect:對號進度 0→1hideCorrect:對號進度 1→0showUnChecked:半徑縮小 1→0顏色漸變:evaluate(fraction, unCheckColor, checkColor) 線性插值 ARGB。
public class TouchCheckBox extends View {
Paint circlePaint, tickPaint;
float radius, correctProgress;
boolean isChecked, isAnim;
// onSizeChanged 計算幾何座標
// onDraw 繪製圓形 + 對號
// 點擊觸發動畫鏈
// 提供 setChecked、setOnCheckedChangeListener
}
ValueAnimator.ofFloat(0,1) + LinearInterpolatorcanvas.drawCircle + canvas.drawLine