Android自定义View系列(一)——打造一个爱心进度条

本文是Android自定义View系列的第一篇,通过创建一个心形进度条,介绍自定义View的流程和贝塞尔曲线的使用。文章详细讲解了如何定义XML属性、获取属性值、测量、绘制以及如何根据进度更新颜色。通过实例,读者可以学习到自定义View的基本方法。
摘要由CSDN通过智能技术生成

写作原因:Android进阶过程中有一个绕不开的话题——自定义View。这一块是安卓程序员更好地实现功能自主化必须迈出的一步。下面这个系列博主将通过实现几个例子来认识安卓自定义View的方法。从自定义View到自定义ViewGroup,View事件处理再到View深入分析(这一章如果水平未到位可能今后再补充),其中会涉及一些小的知识,包括Canvas的使用、动画等等。系列第一篇文章通过绘制一个心形进度条来学习自定义View的整体流程和简单地贝塞尔曲线的用法。下面开始折磨键盘吧。


最终效果

先看看今天我们要实现的效果:

效果

具体功能就是一个心形的进度条,跟普通的进度条相似,但是显示进度的方式和整体的外观实现了自定义化。这个进度条会根据进度不断加深颜色,效果还不错。通过这个例子读者可以学会基本的自定义View的方法。

基本思路

我们需要新建一个attrs.xml来描述HeartProgressBar的属性,一个HeartProgressBar.java继承ProgressBar(直接继承View也行),然后通过取出属性,测量,绘制几步来实现自定义View全过程。

具体实现

一、定义XML属性文件

新建values/attrs.xml,在XML中声明好各个属性,注意一下format,详细的用法参考官方文档。然后在标签下引入属性,具体见下面:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="UnReachedColor" format="color"/>
    <attr name="ReachedColor" format="color"/>
    <attr name="InnerTextColor" format="color"/>
    <attr name="InnerTextSize" format="dimension"/>
    <attr name="Progress" format="integer"/>
    <declare-styleable name="HeartProgressBar">
        <attr name="UnReachedColor"/>
        <attr name="ReachedColor" />
        <attr name="InnerTextColor" />
        <attr name="InnerTextSize" />
        <attr name="Progress"/>
    </declare-styleable>
</resources>

二、获取XML中的属性

这一步我们使用obtainAttributes()方法来获取开发者在布局中为我们的View设定的参数值。通过TypedArray ta = getResources().obtainAttributes(attrs,R.styleable.HeartProgressBar);获得TypedArray对象,使用该对象的get系列方法来获取参数值,如:unReachedColor = ta.getColor(R.styleable.HeartProgressBar_UnReachedColor,UNREACHEDCOLOR_DEFAULT);。后面的UNREACHEDCOLOR_DEFAULT是默认参数值,是view创建者定义的,注意尺寸相关的需要进行单位转换。这样就取到了View的参数,这些参数是我们用来定义View的部分元素。

三、调用onMeasure()测量

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值