Android自定義View實(shí)現(xiàn)圓形進(jìn)度條
本文實(shí)例為大家分享了Android自定義View實(shí)現(xiàn)圓形進(jìn)度條的具體代碼,供大家參考,具體內(nèi)容如下
原理非常簡(jiǎn)單,在自定義View的基礎(chǔ)上使用Canvas的drawCircle畫兩個(gè)圓,一個(gè)圓代表總體,一個(gè)圓代表現(xiàn)有進(jìn)度,在主線程中使用set方法在Handler中傳遞進(jìn)度,進(jìn)度和總體都可以添加set、get方法進(jìn)行自定義
//主線程代碼如下 public class MainActivity extends Activity { private Button mBtn_start; private MyProgresscircle myProgresscircle; private int progress; private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 0: progress++; if(progress<=100){//形成循環(huán) myProgresscircle.setCurrentProgress(progress);//傳遞進(jìn)度 handler.sendEmptyMessageDelayed(0,200);//模擬下載延遲 ? ? ? ? ? ? ? ? ? ? } break; ? ? ? ? ? ? } ? ? ? ? } ? ? }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ? ? ? ? setContentView(R.layout.activity_main); myProgresscircle= (MyProgresscircle) findViewById(R.id.myprogress); mBtn_start= (Button) findViewById(R.id.button_start); mBtn_start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handler.sendEmptyMessage(0);//啟動(dòng)下載發(fā)送一個(gè)空消息開始 ? ? ? ? ? ? } ? ? ? ? }); ? ? } } //自定義View代碼: public class MyProgresscircle extends View { private int width; private int height; private Paint mPaintText; private Paint mPaintCircle; private Paint mPaintCircleCurrent; private int CurrentProgress; private int MaxProgress=100; public void setCurrentProgress(int currentProgress) { CurrentProgress = currentProgress; ? ? ? ? invalidate(); ? ? } public int getMaxProgress() { return MaxProgress; ? ? } public void setMaxProgress(int maxProgress) { MaxProgress = maxProgress; ? ? } public MyProgresscircle(Context context) { super(context); ? ? } public MyProgresscircle(Context context, AttributeSet attrs) { super(context, attrs); mPaintText=new Paint();//字體進(jìn)度畫筆 mPaintText.setTextSize(80); mPaintText.setColor(Color.WHITE); mPaintText.setStrokeWidth(10); mPaintText.setTextAlign(Paint.Align.CENTER);//偏移 mPaintCircle=new Paint();//外圓畫筆 mPaintCircle.setColor(Color.GRAY); mPaintCircle.setAntiAlias(true); mPaintCircle.setStrokeWidth(10); mPaintCircleCurrent=new Paint();//進(jìn)度圓畫筆 mPaintCircleCurrent.setColor(Color.YELLOW); mPaintCircleCurrent.setAntiAlias(true); mPaintCircleCurrent.setStrokeWidth(10); ? ? } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {//這個(gè)復(fù)寫方法用來(lái)得到寬和高 super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec); ? ? ? ? setMeasuredDimension(width, height); ? ? } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); ? ? ? ? canvas.drawCircle(width / 2, height / 2, 200, mPaintCircle); ? ? ? ? canvas.drawCircle(width/2,height/2,CurrentProgress/100f*200,mPaintCircleCurrent); ? ? ? ? canvas.drawText(CurrentProgress*100f/MaxProgress+"%",width/2,height/2,mPaintText);//把進(jìn)度轉(zhuǎn)化為百分比 ? ? } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android界面數(shù)據(jù)懶加載實(shí)現(xiàn)代碼
這篇文章主要為大家分享了Android界面數(shù)據(jù)懶加載實(shí)現(xiàn)代碼,告訴大家怎樣實(shí)現(xiàn)界面即Fragment的懶加載,感興趣的小伙伴們可以參考一下2016-09-09Android Studio實(shí)現(xiàn)進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了Android Studio實(shí)現(xiàn)進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04Android普通應(yīng)用升級(jí)為系統(tǒng)應(yīng)用并獲取系統(tǒng)權(quán)限的操作
這篇文章主要介紹了Android普通應(yīng)用升級(jí)為系統(tǒng)應(yīng)用并獲取系統(tǒng)權(quán)限的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-03-03android okhttp的基礎(chǔ)使用【入門推薦】
本文主要總結(jié)了Android著名網(wǎng)絡(luò)框架-okhttp的基礎(chǔ)使用。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01android支付寶客戶端html5網(wǎng)頁(yè)無(wú)法自動(dòng)關(guān)閉問題的解決方法
這篇文章主要為大家詳細(xì)介紹了android支付寶客戶端html5網(wǎng)頁(yè)無(wú)法自動(dòng)關(guān)閉問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04android實(shí)現(xiàn)雙日期選擇控件(可隱藏日,只顯示年月)
本篇文章主要介紹了android實(shí)現(xiàn)雙日期選擇控件(可隱藏日,只顯示年月) ,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2017-01-01Android 應(yīng)用適配 Android 7.0 權(quán)限要求詳解
今天小編就為大家分享一篇Android 應(yīng)用適配 Android 7.0 權(quán)限要求詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-08-08