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

    Promise所要解决的问题:回调地狱 asyncTask1(data, function (data1){ asyncTask2(data1, function (data2){ asyncTask ...

  2. 给maven仓库添加镜像

    用maven下载好慢啊,快试试阿里云镜像吧!修改$MAVEN_HOME/conf/settings.xml <!-- 阿里云仓库 --> <mirror> <id> ...

  3. UltraEdit打开中文乱码

    http://hellofs.blog.51cto.com/6109153/1187548 UltraEdit很强大,但是今天发现在打开含有中文的文本时会乱码,还是在配置里找找相关的设置,可以在如图的 ...

  4. Linux内核同步 - RCU基础

    一.前言 关于RCU的文档包括两份,一份讲基本的原理(也就是本文了),一份讲linux kernel中的实现.第二章描述了为何有RCU这种同步机制,特别是在cpu core数目不断递增的今天,一个性能 ...

  5. 进程枚举之PSAPI函数

    使用PSAPI (Process StatusAPI)函数 这是一种Windows NT/2000下的方法.核心是使用EnumProcesses函数.它的原型如下: BOOL EnumProcesse ...

  6. python pandas 计算相关系数

    pandas 中df 对象自带相关性计算方法corr() , 可以用来计算DataFrame对象中所有列之间的相关系数(包括pearson相关系数.Kendall Tau相关系数和spearman秩相 ...

  7. android studio - 暂停AndroidStudio中的Git

    解决办法 AndroidStudio 打开 Setting>Plugins 找到Git Integer 取消插件(将右边钩钩去掉) restart AndroidStudio done

  8. 每日英语:Can Going In and Out of Air Conditioning Cause Colds?

    For most people, summer involves numerous daily shifts between scorching outdoor heat and frosty air ...

  9. mac下两种很常见的button的xib设置

    第一种,双变button.就是有两种状态的button:普通态和点击选中态. 第二种,点变button.有两种状态:普通态和mouseDown的态,mouseUp时同普通态.

  10. How do I create a List in Scala?

    Scala List class FAQ: How do I create a List in Scala? You can create a Scala List in several differ ...