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

先上图,一目了然

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

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

上代码:

<?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. redis.clients.jedis.HostAndPort - cant resolve localhost address

    阿里云ECS部署spring-boot访问redis出现redis.clients.jedis.HostAndPort - cant resolve localhost address 摘要: 阿里云 ...

  2. docker从零开始网络(六)Macvlan

    使用Macvlan网络 某些应用程序,尤其是遗留应用程序或监视网络流量的应用程序,希望直接连接到物理网络.在这种情况下,您可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配MAC地址,使其 ...

  3. 《锋利的jQuery》读书要点笔记7——制作商城网页:网站脚本

    第8章 用jQuery打造个性网站 上一节将网页的样式设计完了,现在开始用jQuery来编写网站的脚本.首先要确定的是应该完成哪些功能. 首页应该完成的功能是: 详情页: 这个页面要完成的效果是: 接 ...

  4. 《深入理解Java虚拟机》学习笔记

    <深入理解Java虚拟机>学习笔记 一.走近Java JDK(Java Development Kit):包含Java程序设计语言,Java虚拟机,JavaAPI,是用于支持 Java 程 ...

  5. KO工作原理及带来的好处

    介绍 Knockout是一个以数据模型(data model)为基础的能够帮助你创建富文本,响应显示和编辑用户界面的JavaScript类库.任何时候如果你的UI需要自动更新(比如:更新依赖于用户的行 ...

  6. AMQ学习笔记 - 08. Spring-JmsTemplate之发送

    概述 JmsTemplate提供了3组*3,共计9个发送用的方法.   发送的方法有3组: 基本的发送 转换并发送 转换.后处理再发送 必需的资源 必需的资源有: javax.jms.Connecti ...

  7. Tarjan求LCA总结

    Tarjan算法向上标记法:从x向上走到根节点,并标记所有经过的点从y向上走到根节点,当第一次遇到已标记的节点时,就找到了LCA(x, y)对于每个询问,向上标记法的时间复杂度最坏为O(n) 在深度遍 ...

  8. POJ 1722 SUBTRACT

    给定一个数组a[1,2,..,n] .定义数组第i位上的减操作:把ai和ai+1换成ai - ai+1.输入一个n位数组以及目标整数t,求一个n-1次操作序列,使得最后剩下的数等于t最后输出依此操作的 ...

  9. HDU1754I Hate It(线段树)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  10. hihocoder Counting Islands II(并查集)

    Counting Islands II 描述 Country H is going to carry out a huge artificial islands project. The projec ...