前兩天公司需求,實現進度條動畫,原本想在網上找找有沒有相似的拿來用,想偷懶都不行。就簡單自定義
View
進度條動畫。實現很簡單。java
Github項目地址android
動畫效果很簡單,使用
ObjectAnimator
屬性動畫來實現,這個官方提供一些Api使用,具體能夠查看官方文檔。若是之後須要實現更復雜的動畫,能夠以此爲例進行自定義。這裏我會對基礎自定義View
動畫實現簡單的說明,具體說明在代碼註釋。若是大家須要的效果跟個人相似,你能夠直接把ProgressView文件拷貝下來使用,須要的屬性不夠用的話能夠直接在裏面修改添加。git
View
-ProgressView
代碼(只展現主要代碼)public class ProgressView extends View {
private void initView() {
//初始化畫筆
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
animator = new ObjectAnimator();
//設置動畫屬性
animator.setPropertyName("progress");
//設置執行動畫的View
animator.setTarget(this);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//畫筆屬性
paint.setAntiAlias(true); //設置畫筆爲無鋸齒
paint.setColor(color); //設置畫筆顏色
paint.setStyle(Paint.Style.FILL);
paint.setStrokeWidth(1);
//圓角形狀設置到畫布
RectF rectF = new RectF(0, 0, progress, getHeight());
canvas.drawRoundRect(rectF, radius, radius, paint);
}
public void startAnim() {
if (animator.isRunning()) animator.end();
//設置進度數組, 0 - max
animator.setFloatValues(0, progress);
//設置動畫時間
animator.setDuration(duration);
//動畫開啓
animator.start();
}
}
複製代碼
xml
添加代碼<cn.luliangdev.devprogressview.ProgressView
android:id="@+id/progressview"
android:layout_width="wrap_content"
android:layout_height="30dp"/>
複製代碼
//設置顏色
progressview.setColor(getResources().getColor(R.color.colorAccent));
//設置圓角 默認無圓角
progressview.setRadius(6);
//設置進度條長度 默認px
progressview.setProgress(500);
//設置動畫時間
progressview.setDuration(500);
//開啓動畫
progressview.startAnim();
//動畫監聽
progressview.getAnimator().addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
//動畫開始
}
@Override
public void onAnimationEnd(Animator animation) {
//動畫結束
}
@Override
public void onAnimationCancel(Animator animation) {
//動畫取消
}
@Override
public void onAnimationRepeat(Animator animation) {
//動畫重複
}
});
複製代碼
若是遇到問題或者好的建議,請反饋到:issue、927195249@qq.com 或者LiangLuDev@gmail.comgithub
若是以爲對你有用的話,贊一下吧!canvas