效果:圆圈进度条,该进度条有两层
- 里面一层为一整圈 可以设置一整圈代表的总进度
- 外层代表当前进度,可设置当前的进度,运行效果是平滑地从0进度滑动到当前进度
贴上一张图(由于是截图没有动画效果)
思路:
- 继承View
- 画出两个空心圆,并且两个圆重叠,两个圆圈的边宽大小不同(外>内)
- 计算当前进度占总进度的大小,得出最后滑动到的角度。
- 利用动画监听使得产生滑动的效果,在动画更新监听中获取当前动画的时间比例值
- 用该时间比例值和估值器,在动画更新监听中更新角度比例直到当前进度的角度比例。
- 在每次角度更新后调用invalidate(),进而刷新进度。
代码
public class ProgressCircle extends View implements ValueAnimator.AnimatorUpdateListener{
private final String TAG="ASENDI";
private Paint mPaint;
private Paint mShadowPaint;
private int mProgressBorderWidth=20; //进度条的大小
private int mProgressShadowWidth=3;
private int mProgressBorderColor; //进度颜色
private int mProgressShadowColor; //背景颜色
private float mProgressCurrent;// 当前进度
private float mProgressTotal;//最大进度
private final float mStartProgress=-90f; //从最顶端开始
pr