文档章节

自定义饼状图工具类

火文乐武
 火文乐武
发布于 2016/09/04 15:35
字数 788
阅读 5
收藏 0

package com.example.administrator.myapplication;

import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Typeface; import android.util.AttributeSet; import android.util.Log; import android.view.View;

/**

  • Created by Administrator on 2016/8/20 0020. */ public class RoundProgressBar extends View{

    /**

    • 画笔对象的引用 */ private Paint paint;

    /**

    • 圆环的颜色 */ private int roundColor;

    /**

    • 圆环进度的颜色 */ private int roundProgressColor;

    /**

    • 中间进度百分比的字符串的颜色 */ private int textColor;

    /**

    • 中间进度百分比的字符串的字体 */ private float textSize;

    /**

    • 圆环的宽度 */ private float roundWidth;

    /**

    • 最大进度 */ private int max;

    /**

    • 当前进度 / private int progress; /*
    • 是否显示中间的进度 */ private boolean textIsDisplayable;

    /**

    • 进度的风格,实心或者空心 */ private int style; //空心 public static final int STROKE = 0; //实心 public static final int FILL = 1;

    public RoundProgressBar(Context context) { this(context, null); }

    public RoundProgressBar(Context context, AttributeSet attrs) { this(context, attrs, 0); }

    public RoundProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle);

     paint = new Paint();
    
     TypedArray mTypedArray = context.obtainStyledAttributes(attrs,
             R.styleable.RoundProgressBar);
    
     //获取自定义属性和默认值
     roundColor = mTypedArray.getColor(R.styleable.RoundProgressBar_roundColor, Color.RED);
     roundProgressColor = mTypedArray.getColor(R.styleable.RoundProgressBar_roundProgressColor, Color.GREEN);
     textColor = mTypedArray.getColor(R.styleable.RoundProgressBar_textColor, Color.GREEN);
     textSize = mTypedArray.getDimension(R.styleable.RoundProgressBar_textSize, 15);
     roundWidth = mTypedArray.getDimension(R.styleable.RoundProgressBar_roundWidth, 30);
     max = mTypedArray.getInteger(R.styleable.RoundProgressBar_max, 100);
     textIsDisplayable = mTypedArray.getBoolean(R.styleable.RoundProgressBar_textIsDisplayable, true);
     style = mTypedArray.getInt(R.styleable.RoundProgressBar_style, 1);
    
     mTypedArray.recycle();
    

    }

    @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas);

     /**
      * 画最外层的大圆环
      */
     int centre = getWidth()/2; //获取圆心的x坐标
     int radius = (int) (centre - roundWidth/2); //圆环的半径
     paint.setColor(roundColor); //设置圆环的颜色
     paint.setStyle(Paint.Style.STROKE); //设置空心
     paint.setStrokeWidth(roundWidth); //设置圆环的宽度
     paint.setAntiAlias(true);  //消除锯齿
     canvas.drawCircle(centre, centre, radius, paint); //画出圆环
    
     Log.e("log", centre + "");
    
     /**
      * 画进度百分比
      */
     paint.setStrokeWidth(0);
     paint.setColor(textColor);
     paint.setTextSize(textSize);
     paint.setTypeface(Typeface.DEFAULT_BOLD); //设置字体
     int percent = (int)(((float)progress / (float)max) * 100);  //中间的进度百分比,先转换成float在进行除法运算,不然都为0
     float textWidth = paint.measureText(percent + "%");   //测量字体宽度,我们需要根据字体的宽度设置在圆环中间
    
     if(textIsDisplayable && percent != 0 && style == STROKE){
         canvas.drawText(percent + "%", centre - textWidth / 2, centre + textSize/2, paint); //画出进度百分比
     }
    
    
     /**
      * 画圆弧 ,画圆环的进度
      */
    
     //设置进度是实心还是空心
     paint.setStrokeWidth(roundWidth); //设置圆环的宽度
     paint.setColor(roundProgressColor);  //设置进度的颜色
     RectF oval = new RectF(centre - radius, centre - radius, centre
             + radius, centre + radius);  //用于定义的圆弧的形状和大小的界限
    
     switch (style) {
         case STROKE:{
             paint.setStyle(Paint.Style.STROKE);
             canvas.drawArc(oval, 0, 360 * progress / max, false, paint);  //根据进度画圆弧
             break;
         }
         case FILL:{
             paint.setStyle(Paint.Style.FILL_AND_STROKE);
             if(progress !=0)
                 canvas.drawArc(oval, 0, 360 * progress / max, true, paint);  //根据进度画圆弧
             break;
         }
     }
    // postInvalidate();
    

    }

    public synchronized int getMax() { return max; }

    /**

    • 设置进度的最大值
    • @param max */ public synchronized void setMax(int max) { if(max < 0){ throw new IllegalArgumentException("max not less than 0"); } this.max = max; }

    /**

    • 获取进度.需要同步
    • @return */ public synchronized int getProgress() { return progress; }

    /**

    • 设置进度,此为线程安全控件,由于考虑多线的问题,需要同步
    • 刷新界面调用postInvalidate()能在非UI线程刷新
    • @param progress */ public synchronized void setProgress(int progress) { if(progress < 0){ throw new IllegalArgumentException("progress not less than 0"); } if(progress > max){ progress = max; } if(progress <= max){ this.progress = progress; postInvalidate(); }

    }

    public int getCricleColor() { return roundColor; }

    public void setCricleColor(int cricleColor) { this.roundColor = cricleColor; }

    public int getCricleProgressColor() { return roundProgressColor; }

    public void setCricleProgressColor(int cricleProgressColor) { this.roundProgressColor = cricleProgressColor; }

    public int getTextColor() { return textColor; }

    public void setTextColor(int textColor) { this.textColor = textColor; }

    public float getTextSize() { return textSize; }

    public void setTextSize(float textSize) { this.textSize = textSize; }

    public float getRoundWidth() { return roundWidth; }

    public void setRoundWidth(float roundWidth) { this.roundWidth = roundWidth; }

} attrs.xml:

<?xml version="1.0" encoding="UTF-8"?>

<resources> <declare-styleable name="RoundProgressBar"> <attr name="roundColor" format="color"/> <attr name="roundProgressColor" format="color"/> <attr name="roundWidth" format="dimension"></attr> <attr name="textColor" format="color" /> <attr name="textSize" format="dimension" /> <attr name="max" format="integer"></attr> <attr name="textIsDisplayable" format="boolean"></attr> <attr name="style"> <enum name="STROKE" value="0"></enum> <enum name="FILL" value="1"></enum> </attr> </declare-styleable> </resources>

© 著作权归作者所有

共有 人打赏支持
火文乐武
粉丝 7
博文 38
码字总数 17183
作品 0
郑州
Android工程师
私信 提问
购买java web开发框架 spring mybatis bootstrap maven

希望购买开源Java web框架,最好是 spring mybatis bootstrap maven 其他也可考虑需详谈。希望您的框架能够支撑并发量在100以上的应用,良好兼容chrome和IE,工具类封装完整且具备较好的稳定...

zb1505972740444
2017/09/21
1
0
在Vue项目中使用Echarts(三): Echarts中的其他常用图

一. 前言 在前面两篇文章中, 我们使用了柱状图(bar-chart)和折线图(line-chart), 这篇文章我们介绍以下另外4类常用的图,分别是: 饼状图 散点图 雷达图 仪表盘 下面的代码都是将抽取出来, 分别...

Lee_tanghui
2017/10/07
0
0
阿杜杜不是阿木木/highcharts2javatag

highcharts2javatag 通过自定义标签实现highcharts 3D图表展示,借鉴了Android适配器的思想,通过固定的数据源,展现相关图表,无需考虑图表内部实现。 演示地址: http://dtmonitor.tunnel.q...

阿杜杜不是阿木木
2016/04/06
0
0
利用ECharts可视化mysql数据库中的数据

这是工程所有文件的一个目录 工程文件目录 我做了一个柱状图,一个饼状图,一个折线图,配置过程很恶心,出了好多错,所以在这里记录一下。 如果想直接看 echarts 的部分,可以跳过下面数据库...

teaGod
2017/09/25
0
0
【IOS】开源项目汇总(更新时间2012-6-11)

UI界面类项目: Panoramagl —— 720全景展示 Panorama viewer library for iPhone, iPad and iPod touch MBProgressHUD —— 进度指示 一种优雅的,半透明的进度显示效果。同时还提供了其他...

toss156
2012/03/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android服务2 BindService

MainActivity { class MyService extends Service { public void onCreate() {} public IBinder onBind(Intent intent) { //return new Binder(); retutn new MyBinder(); } public boolean ......

Coding缘
21分钟前
0
0
所有和Java中代理有关的知识点都汇集于此,速进学干货。

对于每一个Java开发来说,代理这个词或多或少都会听说过。你可能听到过的有代理模式、动态代理、反向代理等。那么,到底什么是代理,这么多代理又有什么区别呢。本文就来简要分析一下。 代理...

Java填坑路
27分钟前
0
0
镜像即代码:基于Packer构建阿里云镜像

什么是Packer Packer是HashiCorp推出的一款工具,旨在提供简易的方式自动化构建镜像。通过Packer,你只需要在配置文件中指明镜像构建所需的基本信息及期望安装到镜像中的软件及配置,即可通过...

迷你芊宝宝
28分钟前
0
0
好程序员前端教程之JavaScript闭包和匿名函数的关系详解

好程序员前端教程之JavaScript闭包和匿名函数的关系详解 本文讲的是关于JavaScript闭包和匿名函数两者之间的关系,从匿名函数概念到立即执行函数,最后到闭包。下面一起来看看文章分析,希望...

好程序员IT
36分钟前
0
0
简单的file获取文本内容且, 修改文本内容(java8)

题主, 因入职新公司, 表设计混乱, 不得不手动写一个小脚本,获取所有字段后,重新写入至新表中; 思路 顺序如下 原sql 具体, 获取行 , 根据行开头的" ,"截取内容, 重新输入到txt, 中就可以了; 代...

尾生
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部