智能家居越来越流行,在智能家居中我们常要表现一些数据的百分比 圆形度条中间加个图是一种很流行的自己定义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自己定义控件:进度条的四种实现方式

    前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://down ...

  2. android 自定义控件——(四)圆形进度条

    ----------------------------------↓↓圆形进度条(源代码下有属性解释)↓↓---------------------------------------------- ...

  3. Android自己定义控件系列五:自己定义绚丽水波纹效果

    尊重原创!转载请注明出处:http://blog.csdn.net/cyp331203/article/details/41114551 今天我们来利用Android自己定义控件实现一个比較有趣的效果 ...

  4. MFC控件编程进度条编写

    MFC控件编程进度条编写 一丶进度条编程需要用到的方法 进度条MFC已经帮我们封装好类了. 叫做 CProgressCtrl  进度条编程也很简单. 封装的方法也就那个那几个. GetPos()  获 ...

  5. android 自己定义控件

    Android自己定义View实现非常easy 继承View,重写构造函数.onDraw.(onMeasure)等函数. 假设自己定义的View须要有自己定义的属性.须要在values下建立attrs ...

  6. Android自己定义控件皮肤

    Android自己定义控件皮肤 对于Android的自带控件,其外观仅仅能说中规中矩,而我们平时所示Android应用中,一个简单的button都做得十分美观.甚至于很多button在按下时的外观都有 ...

  7. android 自己定义控件属性(TypedArray以及attrs解释)

    近期在捣鼓android 自己定义控件属性,学到了TypedArray以及attrs.在这当中看了一篇大神博客Android 深入理解Android中的自己定义属性.我就更加深入学习力一番.我就沿着这 ...

  8. Highcharts 测量图;Highcharts 圆形进度条式测量图;Highcharts 时钟;Highcharts 双轴车速表;Highcharts 音量表(VU Meter)

    Highcharts 测量图 配置 chart.type 配置 配置 chart 的 type 为 'gauge' .chart.type 描述了图表类型.默认值为 "line". ...

  9. 【Android 应用开发】 自定义 圆形进度条 组件

    转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://down ...

随机推荐

  1. iOS - PairProgramming 结对编程

    1.PairProgramming 结对编程(Pair-Programming)可能是近年来最为流行的编程方式.所谓结对编程,也就是两个人写一个程序,其中,一个人叫 Driver,另一个人叫 Obse ...

  2. $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别

    当 DOM(文档对象模型) 已经加载,并且页面(包括图像)已经完全呈现时,会发生 ready 事件.ready() 函数仅能用于当前文档,因此无需选择器.所以document选择器可以不要,那么就可以 ...

  3. python学习笔记011——内置函数pow()

    1 语法 pow(x, y[, z]) x -- 数值表达式. y -- 数值表达式. z -- 数值表达式. 函数是计算 x 的 y 次方,如果 z 在存在,则再对结果进行取模,其结果等效于pow( ...

  4. OGG_GoldenGate数据传递文件Trial(案例)

    2014-03-05 Created By BaoXinjian

  5. ASM_Oracle ASM的常用命令(汇总)

    2014-07-02 Created By BaoXinjian

  6. Xfire实现webservice时,对象传递规则及解析简析

    Xfire实现webservice,传递对象解析的话,要分两种情况处理:1.基本类型对象:2.复杂对象 其实,在客户端直接传递数组,如String[] int[]等这些无法通过配置具体类型来通知xfi ...

  7. swagger and restful api 参考

      http://git.oschina.net/redArmy/spring-cloud-books/blob/master/spring-cloud-provider-book/src/main/ ...

  8. spring boot 整合 redis

    自己开发环境需要安装 redis 服务,百度一下很多,下面主要说明Springboot 集成 redis 讲解 我的版本 java8 + redis3.0 + springboot 1.5.9. Sp ...

  9. php四种排序算法实现代码

    分享php排序的四种算法与代码. 冒泡:function bubble_sort($arr){ $num = count($arr); for($i=0;$i<$num;$i++){ for($ ...

  10. android Handlerr.removeCallbacksAndMessages(null)的妙用

    今天在阅读代码发现了android  Handlerr.removeCallbacksAndMessages(null)代码 在ondestory()调用,之前没用过,那想弄懂咋办,查api: pub ...