自定义圆形ProgressBar

公司的项目已经完成了几个了,无一例外,都有计步的功能,我的天哪,能不能有点创意,好吧,既然还要套代码,那么就把一些刁钻的UI给封装好,以后就可以直接使用提高效率了。说是刁钻,其实也并没有很夸张,只是原生控件实现不了而已。

这次的自定义View就是RoundProgressBar,顾名思义,圆形的ProgressBar而已,网上其实也有相关的博客,但我这里并不是简单的在View上面画个圆而已,我会稍微加点效果上去,尽量让它华丽点。

先上效果图:



好吧,步骤依然还是那几步:

1. 定义好attr属性,并在构造函数里将其初始化。

属性定义:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="RoundProgressBar">
        <attr name="max" format="integer"/>
        <attr name="progress" format="integer"/>
        <attr name="count" format="integer"/>
        <attr name="countWidth" format="dimension"/>
        <attr name="countAngle" format="float"/>
        <attr name="countColor" format="color"/>
        <attr name="secondCountColor" format="color"/>
        <attr name="startAngle" format="float"/>
        <attr name="spacingFromAngle" format="float"/>
        <attr name="spacingToAngle" format="float"/>
        <attr name="isSpacing" format="boolean"/>
        <attr name="animation" format="boolean"/>
        <attr name="animationDuration" format="integer"/>
    </declare-styleable>
</resources>
属性注释:

	//进度
	private int progress;
	//最大进度
	private int max;
	//矩形小块的个数
	private int count;
	//小块的宽度,实际应该叫高度才对,这个width实际是画弧线的strokeWidth而已
	private int countWidth;
	//小块所占的角度
	private float countAngle;
	//小块的颜色,相当于progressColor
	private int countColor;
	//小块的第二颜色,即进度颜色,相当于secondProgressColor
	private int secondCountColor;
	//进度的起始角度,即从progress从0开始的角度
	private float startAngle;
	//是否挖空部分进度
	private boolean isSpacing;
	//挖空的开始角度
	private float spacingFromAngle;
	//挖空的结束角度
	private float spacingToAngle;
	//是否使用动画更新progress
	private boolean animation;
	//动画的持续时间
	private long animationDuration;

2. 重写onMeasure(),处理好宽高和默认宽高。

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		// TODO Auto-generated method stub
		
		//主要是使view的宽高一样,以及当wrap_content时默认为100dp
		int widthMode=MeasureSpec.getMode(widthMeasureSpec);
		int width=MeasureSpec.getSize(wid
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值