Android 自定义View之BounceProgressBar

转载请注明出处:http://blog.csdn.net/bbld_/article/details/41246247 【Rocko's blog


之前几天下载了很久没用了的桌面版酷狗来用用的时候,发现其中加载歌曲的等待进度条的效果不错(个人感觉),如下:




然后趁着这周末两天天气较冷,窝在宿舍放下成堆的操作系统作业(目测要抄一节多课的一堆堆文字了啊...啊..)毅然决定把它鼓捣出来,最终的效果如下(总感觉有点不和谐啊·):




对比能看出来的就是多了形状的选择还有使用图片了,那么接下来就是它的实现过程。

对自定义View实现还不明白的建议看下郭神的博客(View系列4篇): Android LayoutInflater原理分析,带你一步步深入了解View(一) 和大苞米的这篇:ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解


自定义属性

自定义View一般都要用到view本身的属性了,重写现有的控件则不用。额,然后我们的这个BounceProgressBar需要什么特有的属性呢?首先要明确的是这里BounceProgressBar没有提供具体进度表现的实现的。再具体想想:它需要每个图像的大小,叫singleSrcSize,类型就是dimension了;上下跳动的速度,叫speed,类型为integer;形状,叫shape,类型为枚举类型,提供这几个形状的实现,original、circle、pentagon、rhombus、heart都是见名知意的了;最后是需要的图片资源,叫src,类型为reference|color,即可以是drawable里的图片或颜色值。

有了需要的属性后,在values文件夹下建个资源文件(名字随意,见名知意就好)来定义这些属性了,如下,代码可能有些英文,而且水平有些渣,不过一般前面都会解释了的:

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

    <declare-styleable name="BounceProgressBar">

        <!-- the single child size -->
        <attr name="singleSrcSize" format="dimension" />
        <!-- the bounce animation one-way duration -->
        <attr name="speed" format="integer" />
        <!-- the child count ,本来还想能自定义个数的,但是暂时个人实现起来有些麻烦,所以先不加这个-->
        <!-- <attr name="count" format="integer" min="1" /> -->
        <!-- the progress child shape -->
        <attr name="shape" format="enum">
            <enum name="original" value="0" />
            <enum name="circle" value="1" />
            <enum name="pentagon" value="2" />
            <enum name="rhombus" value="3" />
            <enum name="heart" value="4" />
        </attr>
        <!-- the progress drawable resource -->
        <attr name="src" format="reference|color"></attr>
    </declare-styleable>

</resources>
然后先把BounceProgressBar类写出来如下:

public class BounceProgressBar extends View {
	//...
}
现在就可以在布局里用我们的BounceProgressBar了,这里需要注意的是,我们需要加上下面代码第二行命名空间才能使用我们的属性,也可以把它放到根元素的属性里。

        <org.roc.bounceprogressbar.BounceProgressBar
            xmlns:bpb="http://schemas.android.com/apk/res-auto"
            android:layout_width="wrap_content"
            andro
  • 13
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值