智能家居越来越流行,在智能家居中我们常要表现一些数据的百分比 圆形度条中间加个图是一种非常流行的自定义View

1.第一步 你首先需要对类进行继承View

public class CircleProgressImageView extends View

2.第二步 要实现三个构造方法 并且前面少参数的调用当前多参数的构造方法

public CircleProgressImageView(Context context) {this(context,null);
}public CircleProgressImageView(Context context, AttributeSet attrs) {this(context, attrs,0);
}public CircleProgressImageView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);
    init(context,attrs,defStyleAttr);
}

3.第三步:取自定义属性 并且对画笔 等进行初始化

private void init(Context context, AttributeSet attrs, int defStyleAttr) {this.context=context;
    /**
     * 获取自定义属性
     */
    TypedArray a=context.obtainStyledAttributes(attrs,R.styleable.CIRCLEPROGRESSIMAGEVIEWATTRS);
    bitmap=a.getResourceId(R.styleable.CIRCLEPROGRESSIMAGEVIEWATTRS_imagers,R.mipmap.ic_launcher);
    /**
     * 把图片资源转为Bitmap对象
     */
    drawBitmap=BitmapFactory.decodeResource(context.getResources(),bitmap);
    /**
     * 初始化RectF对象
     */
    mRectF=new RectF();
    mPaint=new Paint();
    mPaint.setAntiAlias(true);

}

4.第四步:是在 onMeasure 方法中对height 和width进行处理

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    /**
     * 获取当前View的宽高
     */
    width=this.getWidth();
    height=this.getHeight();
    /**
     * 对其左右上下进行处理
     */
    mRectF.left=mCircleStoreWidth/2;
    mRectF.top=mCircleStoreWidth/2;
    mRectF.right=width-mCircleStoreWidth/2;
    mRectF.bottom=width-mCircleStoreWidth/2;
}

5.这时候我们需要对ondraw()方法进行绘制了

protected void onDraw(Canvas canvas) {super.onDraw(canvas);
    canvas.drawColor(Color.TRANSPARENT);

    //画圆北京
    mPaint.setColor(getResources().getColor(R.color.orange));
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setStrokeWidth(mCircleStoreWidth);
    canvas.drawArc(mRectF,-90,360,false,mPaint);
    /**
     * 画圆弧的进度显示
     */
    mPaint.setColor(getResources().getColor((R.color.gray)));
    canvas.drawArc(mRectF,-90,((float) mProcessValue/mMaxProcessValue)*360,false,mPaint);
    Log.d(TAG,((float) mProcessValue/mMaxProcessValue)*360+"");
    /**
     * 画中间的图
     */
    float imageLeft=width/2-drawBitmap.getWidth()/2;
    float imageTop=height/2-drawBitmap.getHeight()/2;
    canvas.drawBitmap(drawBitmap,imageLeft,imageTop,mPaint);
}

这样我们就实现了一个非常好看和简单的自定义View 自定义属性参考其他文章 这里就不细说了

但是这个View是不会转动的 只有通过MainActivity在线程中设置setmProcessValue(processValue)调用改变值就可以转动了。

源码下载

Android自定义控件--圆形进度条(中间有图diao)相关推荐

  1. Android自定义圆形进度条

    Android自定义圆形进度条 github地址:https://github.com/opq1289/CircleProgressView 效果图: 无动画: 有动画: 整圆: 切割圆: 具体步骤: ...

  2. android自定义进度条百分比跟着走,Android studio圆形进度条 百分数跟随变化

    本文实例为大家分享了Android studio圆形进度条展示的具体代码,供大家参考,具体内容如下 MainActivity import android.support.v7.app.AppComp ...

  3. 前端 圆形进度图_Highcharts 圆形进度条式测量图

    Highcharts 圆形进度条式测量图 以下实例演示了圆形进度条式测量图. 我们在前面的章节已经了解了 Highcharts 基本配置语法.接下来让我们来看下其他的配置. 配置 chart.type ...

  4. Android 绘制圆形进度条

    Android 绘制圆形进度条 最近项目上有一些需求,需要绘制圆形的进度条满足设计上和交互上的需求: 实现思路 在画布上直接绘制View,需要了解一下几点 1.需要画一个圆 2.圆圈上有不同进度的颜色 ...

  5. Android可触摸圆形进度条,Android 可滚动圆形进度条 滑块和进度在进度条上面跟着滚动...

    Android 可滚动圆形进度条 滑块和进度在进度条上面跟着滚动.package com.example.test; import android.content.Context; import an ...

  6. android自定义圆形进度条,实现动态画圆效果

    自定义圆形进度条效果图如下:应用场景如动态显示分数等. view的自定义属性如下attr.xml <?xml version="1.0" encoding="UTF ...

  7. android实现圆形进度条

    /*** date:2021/1/4 0004* author:wsm (Administrator)* funcation:圆形进度条控件*/public class CircleProgressV ...

  8. android 渐变圆形进度条_flutter好用的轮子推荐七-flutter圆形或线型进度条

    前言 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. IT界著名的尼古拉斯·高尔包曾说:轮子是IT进步的阶梯!热门的框架千篇一律,好用轮子万里挑一!F ...

  9. Android 自定义圆形进度条(圆环刻度)View

    转载请注明出处http://blog.csdn.net/shallcheek/article/details/50343677 这个也刚好是公司软件最近的需求需要到的,当初最早的版本是使用美工切好的图 ...

  10. android 自定义圆形进度条拖动样式,android自定义圆形进度条

    首先在布局文件定义Progressbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tool ...

最新文章

  1. 第七届(16年)蓝桥杯java B组决赛真题及前四题解析
  2. C#实现文件与二进制互转并存入数据库
  3. matlab求心率,心电图QRS波检测(计算心跳次数)
  4. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,2016年下半年系统架构设计师考试论文真题(论述软件设计模式技术及应用)
  5. c语言程序设计对称数,c语言程序设计--对称数
  6. ubuntu16.04 apt-get update出错:由于没有公钥,无法验证下列签名
  7. Android NFC详解
  8. 电脑文件备份到哪里最安全?
  9. MySQL更新数据语句
  10. html页面图片可点击事件,html中如何给图片添加点击事件的详解
  11. word里面搜狗输入法突然不见了
  12. [转载]MySQL 中 char 与 varchar 能存多少汉字问题_-Chaz-_新浪博客
  13. HBase学习(四) HBase API操作
  14. 四元数AHRS姿态解算和IMU姿态解算分析
  15. 则必有不完全相同的奇数排列对换为同一个偶排列
  16. qq邮箱 实现邮件的发送
  17. 如何优化我的世界服务器,我的世界服务器优化教程优化插件和玩法建议
  18. gps定位c语言开发,Android GPS定位开发教程
  19. 谷歌大脑与DeepMind合二为一!为对抗OpenAI打造全新大模型
  20. 教师资格证小学计算机面试题库,小学教师资格证面试题库.docx

热门文章

  1. 龙卷风代码html,龙卷风旋涡.html
  2. [WebGL入门]三十一,Quaternions(四元数)
  3. mac安装虚拟机 centos7
  4. 计算机要重启电脑才能检测出u盘启动,电脑使用U盘需要重启才能识别分析及解决措施...
  5. 芯片测试的目的及原理介绍
  6. n次独立重复试验暨伯努利试验
  7. 清华大学信息 计算机科学与技术,清华大学计算机科学与技术系导师简介:陈渝...
  8. 高德地图开放平台集成所需网址
  9. 摩尔定律,贝尔定律,吉尔德定律,麦特卡尔夫定律
  10. MySQL事务隔离及锁机制