模仿小米的進(jìn)度控件

圖片發(fā)自簡書App

廢話少說,咱們先上效果圖:

github地址:https://github.com/niniloveyou/GradeProgressView

歡迎前去點(diǎn)個(gè)贊(star)

這個(gè)效果的使用場景并不多,主要是各種檢測的時(shí)候,比如垃圾清理,手機(jī)安全檢測, 當(dāng)然如果你不嫌棄這個(gè)效果丑, 也可以用作進(jìn)度條。哈哈。

下面說點(diǎn)干貨分析下這個(gè)效果怎么實(shí)現(xiàn):

拿到這個(gè)效果首先想想主要有哪些技術(shù)難點(diǎn):

1.進(jìn)度條

2.中間的指針怎么弄

.

.

.

.

1.進(jìn)度條

有人說進(jìn)度條還不容易嗎? 就這樣寫:

mPaint.setPathEffect(newDashPathEffect(newfloat[]{dashWith, dashSpace}, 。。。));

canvas.drawArc(mRectF,135,270, false,mPaint);

mPaint.setColor(Color.WHITE);canvas.drawArc(mRectF,135, degree, false, mPaint);


設(shè)置個(gè)PathEffect

然后畫個(gè)圓弧,給畫筆設(shè)置顏色然后根據(jù)進(jìn)度,算出角度, 然后再畫出一個(gè)圓弧,覆蓋第一個(gè)圓弧的部分不就行了。廢話這么多。

不過我想說的too young too simple. 當(dāng)時(shí)我也是這樣想的,于是就實(shí)現(xiàn)吧! 做好了先畫個(gè)50% (也就是第二個(gè)圓弧覆蓋第一個(gè)圓弧的一半)試試,不錯(cuò)啊perfect看來是這樣的, 再來個(gè)30%試試尼瑪不對啊, 怎么小格子沒有重合,有點(diǎn)錯(cuò)位啊。MDZZ

后來想了一個(gè)簡單點(diǎn)的辦法,不覆蓋,畫兩個(gè)圓弧, 但是這兩個(gè)圓弧是對接起來的。 比如第一個(gè)圓弧,畫一半,第二個(gè)畫一半。

//draw background arc

canvas.drawArc(mRectF,135+ degree,270- degree,false, mPaint);

//draw progress arc

canvas.drawArc(mRectF,135, degree,false, mProgressPaint);

2.中間的指針怎么弄

先畫出指針的路徑

mPointerPath = new Path();

mPointerPath.moveTo(centerX + pointRadius, centerY -7);

mPointerPath.lineTo(centerX + pointRadius, centerY +7);

mPointerPath.lineTo(mRectF.right- pointGap - lineWidth /2,centerY);

mPointerPath.lineTo(centerX + pointRadius, centerY -7);

mPointerPath.close();

在中心draw一個(gè)小圓

然后draw指針,這樣當(dāng)畫布旋轉(zhuǎn)時(shí)指針自然也就旋轉(zhuǎn)了,不懂得要去看看canvas.save(), canvas.restore()的作用

//draw pointer

canvas.drawCircle(centerX, centerY, pointRadius,mInnerCirclePaint);

canvas.save();

canvas.rotate(135+ degree, centerX, centerY);

canvas.drawPath(mPointerPath, mPointerPaint);

canvas.restore();


github地址:https://github.com/niniloveyou/GradeProgressView

歡迎前去點(diǎn)個(gè)贊(star)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容