国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android自定義控件實現圓形進度條

2019-10-23 19:49:58
字體:
來源:轉載
供稿:網友

項目中常用到的圓形進度條有好多個,從網上搜到的自定義進度條多是封裝的比較好的代碼,但是不利于初學者,現在本博客就教給大家如何一步步實現自定義進度條的效果

相關視頻鏈接:
http://edu.csdn.net/course/detail/3719/65396

先看效果如圖…

Android自定義圓形進度條,Android圓形進度條,Android進度條

代碼實現過程–main布局
這個布局中就是一個簡單的引用

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:text="開始下載"  android:onClick="start" /> <com.example.pb.ProgressView  android:id="@+id/circleView"  android:layout_width="100dp"  android:layout_height="100dp" /></LinearLayout>

自定義ProgressView-默認是圖中第一種效果

package com.example.pb;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Rect;import android.graphics.RectF;import android.os.Handler;import android.util.AttributeSet;import android.view.View;public class ProgressView extends View { int progress = 0; private String text="0%"; private int max = 100; public ProgressView(Context context, AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr); } public ProgressView(Context context, AttributeSet attrs) {  super(context, attrs); } public ProgressView(Context context) {  super(context); } @Override protected void onDraw(Canvas canvas) {  super.onDraw(canvas);  // 對于畫筆  Paint paint = new Paint();  // 設置抗鋸齒  paint.setAntiAlias(true);  // 設置畫筆顏色  // 三種樣式--Stroke 只要描邊 Fill 填充 FILL_AND_STROKE和既有描邊又有填充  paint.setStyle(Style.STROKE);  //設置描邊寬度  paint.setStrokeWidth(2);  //定義外圈員的顏色  paint.setColor(Color.RED);  //繪制圓形進度條--獲取當前控件多大,正好讓進度條在這個控件區間內  canvas.drawCircle(getMeasuredWidth()/2, getMeasuredWidth()/2, getMeasuredWidth()/2, paint);  //重新設置描邊寬度,這個寬度最好能完全蓋過圓形  paint.setStrokeWidth(3);  //定義限制圓弧的矩形,當前這樣定義正好讓圓弧和圓重合  RectF oval = new RectF(0, 0, getMeasuredWidth(), getMeasuredWidth());  //設置進度條(圓弧的顏色)  paint.setColor(Color.GREEN);  //繪制,設置進度條的度數從0開始,結束值是個變量,可以自己自由設置,來設置進度   //true和false 代表是否使用中心點,如果true,代表連接中心點,會出現扇形的效果  canvas.drawArc(oval, 0, 360 * progress / max, false, paint);  //文字的繪制  paint.setTextSize(40);  //設置文字寬度  paint.setStrokeWidth(1.0f);  //測量文字大小-提前準備個矩形  Rect bounds = new Rect();  //測量文字的寬和高,測量的值可以根據矩形獲取  paint.getTextBounds(text, 0, text.length(), bounds);  paint.setColor(Color.BLACK);  paint.setStyle(Style.FILL);  //繪制文字,計算文字的寬高進行設置  canvas.drawText(text, getMeasuredWidth()/2 - bounds.width() / 2,    getMeasuredWidth()/2 + bounds.height() / 2, paint); } /**  * 初始設置當前進度的最大值-默認100  * @param max  */ public void setMax(int max) {  this.max = max; } /**  * 更新進度和文字  * @param progress  * @param text  */ public void setProgressAndText(int progress, String text) {  this.progress = progress;  this.text = text;  //重新繪制  postInvalidate(); }}

如果想要實現第二種效果

//設置填充模式paint.setStyle(Style.FILL);//繪制,設置進度條的度數從0開始,結束值是個變量,可以自己自由設置,來設置進度   //true和false 代表是否使用中心點,如果true,代表連接中心點,會出現扇形的效果  canvas.drawArc(oval, 0, 360 * progress / max, false, paint);

Activity中代碼–模擬一下下載的過程,效果隨便定義

package com.example.pb;import android.app.Activity;import android.os.Bundle;import android.view.View;public class MainActivity extends Activity { private ProgressView circleView; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  circleView = (ProgressView) findViewById(R.id.circleView); } int progress = 0; public void start(View v) {  // 1000公里  circleView.setMax(100);  progress=0;  new Thread() {   public void run() {    while (true) {     progress = progress + 1;     String text = progress + "%";     circleView.setProgressAndText(progress, text);     try {      sleep(30);     } catch (InterruptedException e) {      // TODO Auto-generated catch block      e.printStackTrace();     }     if (progress == 100) {      break;     }    }   };  }.start(); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 剑河县| 淮南市| 弥渡县| 文水县| 郯城县| 松溪县| 溧水县| 高雄市| 晋城| 石阡县| 定襄县| 呼和浩特市| 寿阳县| 富阳市| 建昌县| 揭东县| 永寿县| 砀山县| 饶平县| 揭阳市| 平湖市| 永泰县| 揭西县| 余庆县| 册亨县| 嫩江县| 且末县| 景谷| 井研县| 通州区| 泽普县| 烟台市| 浑源县| 通渭县| 新晃| 富宁县| 海兴县| 丰都县| 共和县| 罗城| 阜南县|