【Android】自定义ProgressView-进度条动画

前两天公司需求,实现进度条动画,本来想在网上找找有没有类似的拿来用,想偷懒都不行。就简单自定义View进度条动画。实现很简单。

Github项目地址

动画预览

  • 使用在公司项目效果预览
xz-progressview
  • 简洁效果预览
progressview

代码实现

动画效果很简单,使用ObjectAnimator属性动画来实现,这个官方提供一些Api使用,具体可以查看官方文档。如果以后需要实现更复杂的动画,可以以此为例进行自定义。这里我会对基础自定义View动画实现简单的说明,具体说明在代码注释。如果你们需要的效果跟我的类似,你可以直接把ProgressView文件拷贝下来使用,需要的属性不够用的话可以直接在里面修改添加。

看代码才是王道

  • 自定义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.com

如果觉得对你有用的话,赞一下吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,238评论 25 708
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,217评论 3 119
  • 听村里的人说,其实苦菊的名字叫美菊,只是后来人们觉得她命苦,所以都叫她苦菊了。苦菊其实出身还算好,在农村也算...
    千尹阅读 1,153评论 25 68
  • 你好!李小军。我是20年后的你,我现在61岁了。真正的迈入老年。得益于你当时的决定,我已经坚持健身20年了,比起同...
    李子心诚阅读 353评论 0 1
  • 在天愿为比翼鸟,在地愿为连理树。这是多么美好的愿望,又是多么浪费的想法。但是这却是错误的,而且错误在中华文化最古远...
    黄晨昀阅读 449评论 0 0

友情链接更多精彩内容