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)调用改变值就能够转动了。

源代码下载

时间: 2024-11-08 06:31:36

Android自己定义控件--圆形进度条(中间有图diao)的相关文章

Android自己定义控件:进度条的四种实现方式

前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://download.csdn.net/detail/chaoyu168/9616035 近期一直在学习自己定义控件,搜了很多大牛们Blog里分享的小教程.也上GitHub找了一些类似的控件进行学习.发现读起来都不太好懂,就想写这么一篇东西作为学习笔记吧. 一.控件介绍: 进度条在App中非经常见,比例如以下载

Android常用控件:进度条

各种进度条属于 ProgressBar的子类 Sytle: 水平风格:Horizontal小风格:Small大风格:Large反向风格:Inverse小反向风格:Small.Inverse大反向风格:Large.Inverse 设置style:   style="?android:attr/progressBarStyle..." 主要属性:最大值:max当前进度:progress次要进度值:SecondaryProgress --效果类似于看电影那些缓冲 判断进度条是转圈还是水平的方

Android控件TextProgressBar进度条上显文字

Android系统的进度条控件默认的设计的不是很周全,比如没有包含文字的显示,那么如何在Android进度条控件上显示文字呢? 来自Google内部的代码来了解下,主要使用的addView这样的方法通过覆盖一层Chronometer秒表控件来实现,整个代码如下 : public class TextProgressBar extends RelativeLayout implements OnChronometerTickListener { public static final String

Android自己定义控件皮肤

Android自己定义控件皮肤 对于Android的自带控件,其外观仅仅能说中规中矩,而我们平时所示Android应用中,一个简单的button都做得十分美观.甚至于很多button在按下时的外观都有一定变化,用户体验十分好. 这当中,就涉及到了Android自己定义控件属性的操作方法,下面操作以实现自己定义button皮肤为例. 1. 我们要自己定义将要实现的外观状态.能够是图片或者是自己定义的xml,这是我们直接自己定义不同状态的颜色xml,在values文件夹下新建colors.xml,代

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

近期在捣鼓android 自己定义控件属性,学到了TypedArray以及attrs.在这当中看了一篇大神博客Android 深入理解Android中的自己定义属性.我就更加深入学习力一番.我就沿着这个学习,讲一下流程吧,兴许一篇还有应用. 1.attrs文件编写 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="titleText" for

android 自己定义控件

Android自己定义View实现非常easy 继承View,重写构造函数.onDraw.(onMeasure)等函数. 假设自己定义的View须要有自己定义的属性.须要在values下建立attrs.xml. 在当中定义你的属性. 在使用到自己定义View的xml布局文件里须要增加xmlns:前缀="http://schemas.android.com/apk/res/你的应用所在的包路径". 在使用自己定义属性的时候.使用前缀:属性名,如my:textColor="#FF

Android自己定义控件而且使其能够在xml中自己定义属性

为什么要自己定义View android开发中自己定义View的优点是显而易见的.比方说以下的这个顶部导航,它被设计出如今应用的每一个界面,但每次的内容却不尽同样.我们不能在每一个layout资源中都配置一组同样的View吧?假设使用<include layou="@layout/xxx"/>标签,尽管攻克了布局文件的重用性,可是相关View的初始化设置还是没可以重用(集中),须要每次都採用view.findViewById(id)来初始化他们. 有了对"可重用性

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

Highcharts 测量图 配置 chart.type 配置 配置 chart 的 type 为 'gauge' .chart.type 描述了图表类型.默认值为 "line". var chart = { type: 'guage' }; pane 配置 pane 只适用在极坐标图和角度测量仪.此可配置对象持有组合x轴和y周的常规选项.每个x轴和y轴都可以通过索引关联到窗格中. var pane = { startAngle: -150, // x轴或测量轴的开始度数,以度数的方式

Android 高手进阶,自定义圆形进度条

背景介绍 在Android 开发中,我们经常遇到各种各样绚丽的控件,所以,依靠我们Android本身所带的控件是远远不够的,很多时候需要我们自己定义控件,在开发的过程中,我们公司遇到了一种需要自己写的一个自定义带进度的圆形进度条,看起来非常的绚丽,当然还有一些其他的,比如:水纹形的圆形进度条等效果都是非常nice的.如果哪位朋友有实现,希望分享出来,我也好学习学习.好了多的不说,接下来,我们就来看看来如何实现圆形进度条. 原文地址:http://blog.csdn.net/xiaanming/a