最近开始学习自定义控件,看到支付宝支付的ProgressBar动画感觉不错,就学着也做一个这样的ProgressBar。
首先看效果图
原理:
一个线程无限改变进度画弧形,当外部告知结束,通过判断结果呈现成功或者失败动画,通过path坐标缓慢变化就可以实现动画效果
代码如下:
<span style="font-weight: normal;">public class LoadingBar extends View {
/**
* 进度条画笔
*/
private Paint mPaintProgress;
/**
* 进度条背景
*/
private Paint mPaintLoaded;
/**
* 进度条所在矩形
*/
private RectF mRectF;
//中心点坐标
private int mCenterX, mCenterY;
/**
* 加载handler
*/
private Handler mHandlerLoading;
/**
* 加载线程
*/
private Runnable mRunnableLoading;
/**
* 进度条颜色
*/
private int mLoadingBarColor = 0xFF00BCD4;
/**
* 尾部进度
*/
private int mProgressFoot = 0;
/**
* 头部进度
*/
private int mProgressHead = 0;
/**
* 进度最大值
*/
private int maxProgress = 100;
/**
* 是否正在加载
*/
private boolean isLoading;
/**
* 头部速度大于尾部
*/
private boolean isChanse;
/**
* 旋转睡眠时间
*/
private static int PROGRESS_DELAY = 5;
/**
* 加载完成动画路径1
*/
private Path mPath1;
/**
* 加载完成动画路径2
*/
private Path mPath2;
/**
* 路径坐标
*/
private float pathX, pathY;
/**
* 第二条路径坐标
*/
private float pathX2, pathY2;
/**
* 控件宽高
*/
private int minSide;
/**
* 内边框
*/
private static float padding &#