要实现圆形进度条只能使用自定义view了,实现代码比较简单,自定义view代码

package com.example.apple.memory;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;/** * Created by apple on 17/5/26. */public class CircleProgressView extends View {    private int mMaxProgress = 100;    private int Progress = 0;    private int Progress1 = 0;    private int Progress2 = 0;    private final int mCircleLineStrokeWidth = 100;//设置圆形画笔宽度    private final int mTxtStrokeWidth =  2;//设置文字画笔宽度    // 画圆所在的距形区域    private  RectF mRectF;    private  Paint mPaint;    public CircleProgressView(Context context, AttributeSet attrs) {        super(context, attrs,0);        mRectF = new RectF();        mPaint = new Paint();    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        int width = this.getWidth();        int height = this.getHeight();        if (width != height) {            int min = Math.min(width, height);            width = min;            height = min;        }        // 设置画笔相关属性        mPaint.setAntiAlias(true);        mPaint.setColor(Color.WHITE);        canvas.drawColor(Color.TRANSPARENT);        mPaint.setStrokeWidth(mCircleLineStrokeWidth);        mPaint.setStyle(Paint.Style.STROKE);        // 位置        mRectF.left = mCircleLineStrokeWidth / 2;        mRectF.top = mCircleLineStrokeWidth / 2;        mRectF.right = width - mCircleLineStrokeWidth / 2;        mRectF.bottom = height - mCircleLineStrokeWidth / 2;        // 绘制圆圈,进度条背景        canvas.drawArc(mRectF, -180, 360, false, mPaint);        mPaint.setColor(Color.RED);        canvas.drawArc(mRectF, -180, ((float) Progress / mMaxProgress) * 360, false, mPaint);        //绘制第二段长度        mPaint.setColor(Color.BLUE);        canvas.drawArc(mRectF,-180+ ((float) Progress / mMaxProgress) * 360, ((float) Progress1 / mMaxProgress) * 360, false, mPaint);        //绘制第三段长度        mPaint.setColor(Color.BLACK);        canvas.drawArc(mRectF,-180+ ((float) (Progress+Progress1) / mMaxProgress) * 360, ((float) Progress2 / mMaxProgress) * 360, false, mPaint);        //绘制百分百        mPaint.setStrokeWidth(mTxtStrokeWidth);        String text = Progress + "%";        int textHeight = height / 4;        mPaint.setTextSize(textHeight);        int textWidth = (int) mPaint.measureText(text, 0, text.length());        mPaint.setStyle(Paint.Style.FILL);        canvas.drawText(text, width / 2 - textWidth / 2, height / 2 + textHeight / 2, mPaint);    }    public int getMaxProgress() {        return mMaxProgress;    }    public void setMaxProgress(int maxProgress) {        this.mMaxProgress = maxProgress;    }    public void setProgress(int progress) {        this.Progress = progress;        this.invalidate();    }    public void setProgress1(int progress) {        this.Progress1 = progress;        this.invalidate();    }    public void setProgress2(int progress) {        this.Progress2 = progress;        this.invalidate();    }}
2、引用的话首先布局中直接添加就好

<?xml version="1.0" encoding="utf-8"?>    
3、代码中使用,为了看到有个动画效果所以加了个定时器,可以看到慢慢增加到指定值。

package com.example.apple.memory;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {    private CircleProgressView circleProgressView;    private final int UPDATE_PROGRESS = 0;    private int number = 0;    private Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what) {                case UPDATE_PROGRESS:                    circleProgressView.setProgress(2 + number);                    circleProgressView.setProgress1(10 + number);                    circleProgressView.setProgress2(20 + number);                    break;            }            super.handleMessage(msg);        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        circleProgressView = (CircleProgressView) findViewById(R.id.circleProgressBar);        circleProgressView.setMaxProgress(100);        new TestThread().start();    }    class TestThread extends Thread {        @Override        public void run() {            while (number < 20) {                number++;                mHandler.sendEmptyMessage(UPDATE_PROGRESS);                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    }    @Override    protected void onDestroy() {        if (mHandler != null) {            mHandler.removeCallbacksAndMessages(0);            mHandler = null;        }        super.onDestroy();    }}

实现效果


更多相关文章

  1. Android用户定位Google Map显示地图
  2. Android(安卓)布局学习
  3. Android(安卓)- 禁止Gridview滚动
  4. Android全屏和强制横屏竖屏设置
  5. android RadioGroup设置某一个被选中
  6. android时间控件DatePicker使用实例
  7. android涂鸦
  8. 《Android(安卓)基础(十二)》 TextInputLayout,让输入框更有灵性
  9. Android(安卓)Bitmap.setDensity(int density) 和 BitmapDrawabl

随机推荐

  1. Android(安卓)textview 不使用ScrollView
  2. Android之ksoap2-android详解与调用天气
  3. Android应用自动更新功能的实现!!!软件更新,
  4. Android插件-Android Holo Colors Genera
  5. android文件上传示例分享(android图片上
  6. 替换Android自带apk (adb模式和串口模式)
  7. Android 解决 adapter.notifyDataSetChan
  8. 阿里云OS和android的关系
  9. 文件androidAndroid使用PULL解析和生成XM
  10. Android(安卓)四大组件 - 进程的 fork 创