近期一直在学习自己定义控件,昨天看到群里有人问怎样怎样实现圆盘样式的显示,学有所用,于是乎就有了这篇博客

先上图,一目了然

这里的显示颜色以及颜色块的大小你都能够自己设置

这里设置了三种颜色,相应三种颜色的三个角度

上代码:

<?xml version="1.0" encoding="utf-8"?

>
<resources>
<declare-styleable name="CustomCircle">
<attr name="firstColor" format="color"/>
<attr name="secondColor" format="color"/>
<attr name="thirdColor" format="color"/>
<attr name="firstAngle" format="integer"/>
<attr name="secondAngle" format="integer"/>
<attr name="thirdAngle" format="integer"/>
</declare-styleable>
</resources>

以上都属于自己定义属性,当然自己定义了属性就要给它赋值

TypedArray mArray = context.obtainStyledAttributes(attrs,
R.styleable.CustomCircle, defStyleAttr, 0);
firstColor = mArray.getColor(R.styleable.CustomCircle_firstColor,
Color.BLUE);
secondColor = mArray.getColor(R.styleable.CustomCircle_secondColor,
Color.GREEN);
thirdColor = mArray.getColor(R.styleable.CustomCircle_thirdColor,
Color.RED);
firstAngle=mArray.getInt(R.styleable.CustomCircle_firstAngle, 90);
secondAngle=mArray.getInt(R.styleable.CustomCircle_secondAngle, 180);
thirdAngle=mArray.getInt(R.styleable.CustomCircle_thirdAngle, 120); mArray.recycle();

属性赋值结束后,当然就要開始最重要的部分了,绘图,也就是重写onDraw()方法

@Override
protected void onDraw(Canvas canvas) {
int center=getWidth()/2;
int radius=center/2;
mPaint.setColor(Color.GRAY);
mPaint.setStrokeWidth(center);
mPaint.setAntiAlias(true);
mPaint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(center, center, radius, mPaint);
mPaint.setColor(firstColor);
RectF rectF=new RectF(center-radius, center-radius, center+radius, center+radius);
canvas.drawArc(rectF, 0, firstAngle, false, mPaint);
mPaint.setColor(secondColor);
canvas.drawArc(rectF, firstAngle, secondAngle, false, mPaint);
mPaint.setColor(thirdColor);
canvas.drawArc(rectF, secondAngle, thirdAngle, false, mPaint);
}

我们继续,自己定义控件就这么定义结束了,怎样用呢?看过前面博客的人们应该知道吧!

<com.sdufe.thea.guo.view.CustomCircle
android:layout_width="300dp"
android:layout_height="300dp"
custom:firstColor="@android:color/holo_purple"
custom:secondColor="@android:color/holo_blue_bright"
custom:thirdColor="@android:color/holo_orange_light"
custom:firstAngle="60"
custom:secondAngle="180"
custom:thirdAngle="120"/>

这里须要注意的是custom,这就是你自己定义的属性了,前面要声明一下xmlns:custom="http://schemas.android.com/apk/res/你自己的包名"

差点儿相同就这样啦,就实现了你想要的功能,当你看不懂别人的代码逻辑时,你能够debug,这也是一个非常好地办法

代码下载地址:http://download.csdn.net/detail/elinavampire/8175771

Android自己定义(三)实现圆盘的百分比设置的更多相关文章

  1. Android测试(三)——burpsuite抓包设置

    导出证书: 将证书导入模拟器中: 设置监听端口,透明代理(一定要设置这个): 进入adb shell,输入如下命令,即可抓包了:  iptables -t nat -A OUTPUT -p tcp - ...

  2. Android UI--自定义ListView(实现下拉刷新+加载更多)

    Android UI--自定义ListView(实现下拉刷新+加载更多) 关于实现ListView下拉刷新和加载更多的实现,我想网上一搜就一堆.不过我就没发现比较实用的,要不就是实现起来太复杂,要不就 ...

  3. 【转】android 电池(三):android电池系统

    关键词:android电池系统电池系统架构 uevent power_supply驱动 平台信息: 内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV3 ...

  4. Android自己定义组件系列【7】——进阶实践(4)

    上一篇<Android自己定义组件系列[6]--进阶实践(3)>中补充了关于Android中事件分发的过程知识.这一篇我们接着来分析任老师的<可下拉的PinnedHeaderExpa ...

  5. Android 自己定义View (二) 进阶

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24300125 继续自己定义View之旅.前面已经介绍过一个自己定义View的基础 ...

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

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

  7. android Service Activity三种交互方式(付源码)(转)

    android Service Activity三种交互方式(付源码) Android应用服务器OSBeanthread  android Service Binder交互通信实例 最下边有源代码: ...

  8. Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值

    Android For JNI(三)--C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值 C中比较难的这一块,大概就是指针了,所以大家还是多翻阅一下资料,当然,如果只是想了解一下,看本篇 ...

  9. Android JNI学习(三)——Java与Native相互调用

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

随机推荐

  1. sqlalchemy源代码阅读随笔(1)

    今天看的,是url.py模块,这个在create_engine中,起到的最用很大,其本质,就是对访问数据库的url,进行操作管里.我们可以直接访问这个类. 看一个简单的代码: from sqlalch ...

  2. 大数据量的Mysql数据库备份策略

    Centos下mysql常用的三种备份方法 http://www.centoscn.com/CentOS/Intermediate/2013/0807/1160.html xtrabackup备份 h ...

  3. EF中使用Linq时First、FirstOrDefault、Single、SingleOrDefault几个方法的区别

    在使用EntityFramework开发时,.NET的System.Linq.Enumerable类为我们提供了许多Linq方法. 给大家分享一下关于First.FirstOrDefault.Sing ...

  4. (2)创建发布Maven

    一.创建maven项目 (1)命令行 mvn archetype:generate (2)选择模板默认是7 (3)输入组织号.项目名称及版本号.包名 回车确认 创建成功 二.转成idea项目 进入跟目 ...

  5. 2017中国大学生程序设计竞赛 - 女生专场C【前后缀GCD】

    C HDU - 6025 [题意]:去除数列中的一个数字,使去除后的数列中所有数字的gcd尽可能大. [分析]: 数组prefixgcd[],对于prefixgcd[i]=g,g为a[0]-a[i]的 ...

  6. luogu P3919 【模板】可持久化数组(可持久化线段树/平衡树)

    As you see // luogu-judger-enable-o2 #include<cstdio> #include<cstring> #include<algo ...

  7. bzoj 5347: 冒泡排序

    考虑到最后a[i]都要等于i,并且每个 a[i] < i 的a[i] 一轮最多向前走一次,所以局数至少是 max{ i - a[i] }. 又因为对于a[i] < i来说,一轮不动意味着 ...

  8. 【记忆化搜索】bzoj3208 花神的秒题计划Ⅰ

    暴力 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #de ...

  9. 【KM】POJ2195/HDU1533-Going home

    //最近没什么时间quq据说长得帅的人都在切八中,然而长得丑的人只能水水裸题 [题目大意] 给出一张地图及人和房屋的位置,求出每个人回到不同房屋所具有的最小代价和. [思路] 最小权匹配,先O(n^2 ...

  10. 【R笔记】apply函数族

      (1)    apply apply函数通过对数组,矩阵,或非空维数值的数据框的“边缘”(margin)即行或列运用函数.返回值为向量,数组或列表.   函数形式 apply(X, MARGIN, ...