Android自己定义控件--圆形进度条(中间有图diao)
智能家居越来越流行,在智能家居中我们常要表现一些数据的百分比 圆形度条中间加个图是一种很流行的自己定义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)的更多相关文章
- Android自己定义控件:进度条的四种实现方式
前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://down ...
- android 自定义控件——(四)圆形进度条
----------------------------------↓↓圆形进度条(源代码下有属性解释)↓↓---------------------------------------------- ...
- Android自己定义控件系列五:自己定义绚丽水波纹效果
尊重原创!转载请注明出处:http://blog.csdn.net/cyp331203/article/details/41114551 今天我们来利用Android自己定义控件实现一个比較有趣的效果 ...
- MFC控件编程进度条编写
MFC控件编程进度条编写 一丶进度条编程需要用到的方法 进度条MFC已经帮我们封装好类了. 叫做 CProgressCtrl 进度条编程也很简单. 封装的方法也就那个那几个. GetPos() 获 ...
- android 自己定义控件
Android自己定义View实现非常easy 继承View,重写构造函数.onDraw.(onMeasure)等函数. 假设自己定义的View须要有自己定义的属性.须要在values下建立attrs ...
- Android自己定义控件皮肤
Android自己定义控件皮肤 对于Android的自带控件,其外观仅仅能说中规中矩,而我们平时所示Android应用中,一个简单的button都做得十分美观.甚至于很多button在按下时的外观都有 ...
- android 自己定义控件属性(TypedArray以及attrs解释)
近期在捣鼓android 自己定义控件属性,学到了TypedArray以及attrs.在这当中看了一篇大神博客Android 深入理解Android中的自己定义属性.我就更加深入学习力一番.我就沿着这 ...
- Highcharts 测量图;Highcharts 圆形进度条式测量图;Highcharts 时钟;Highcharts 双轴车速表;Highcharts 音量表(VU Meter)
Highcharts 测量图 配置 chart.type 配置 配置 chart 的 type 为 'gauge' .chart.type 描述了图表类型.默认值为 "line". ...
- 【Android 应用开发】 自定义 圆形进度条 组件
转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://down ...
随机推荐
- CTF入门
一.抓包工具 Fiddler:轻量级,简洁,原理是使用代理 有一个大坑,如果打开抓包工具,运行Python Requests发起网络请求,Python程序会运行得非常慢,所以必须把抓包工具关掉才可以快 ...
- 奇怪的php问题
<?php echo 999999999999 % 2; ?> 上面的结果居然是-1,不可思议. 999999999999 % 2
- http://www.cnblogs.com/txw1958/p/alipay-f2fpay.html
一.条码支付及二维码支付介绍 1. 条码支付 条码支付是支付宝给到线下传统行业的一种收款方式.商家使用扫码枪等条码识别设备扫描用户支付宝钱包上的条码/二维码,完成收款.用户仅需出示付款码,所有收款操作 ...
- python学习笔记014——错误和异常
Python有两种错误很容易辨认:语法错误和异常. 1 什么是语法错误 Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例 if i>4 print("if语句输出 ...
- Uri编码,包括javascript前端与C#服务器端
URI编码的方法汇总 javascript中的编码有三种方法:escape.encodeURI.encodeURIComponent C#中编码的主要方法:HttpUtility.UrlEncode. ...
- RCU介绍
RCU原理: RCU(Read-Copy Update),顾名思义就是读-拷贝修改,它是基于其原理命名的.对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个 ...
- ubuntu的apt-get提示资源被锁定
一.错误提示 E: Could not : Resource temporarily unavailable) E: Unable to lock the administration directo ...
- Git 基本分支规范
基本代码分支应该分为两类,一类是主要分支,包括线上主分支 Master 和开发主分支Develop:另一类是辅助分支,包括测试分支 Release,线上紧急修复分支 Hotfix,以及功能开发分支 F ...
- .NET设计模式(4):建造者模式(Builder Pattern)(转载)
概述 在 软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧 烈的变化,但是将它们组合在一起的算法确相对稳 ...
- java中如何设置下载文件
如果想要设置某一url为下载文件的方法如下 需要设置文件响应类型,使用response.setContentType,比如jpeg格式的图片.如果想要访问该页面时出现下载保存的窗口,使用respons ...