位置: 编程技术 - 正文

android自定义之 5.0 风格progressBar(android 自定义drawable)

编辑:rootadmin
最近做项目,用到了ProgressBar ,就想到了要使用Android5.0 的效果,就随手实现了一下。效果图:大概的思路:1. 圆圈通过Canvas去绘制2.圆圈的动画通过Animator去控制代码:1.绘制圆的代码是很简单的,@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawArc(arcRectf, startAngle &#; incrementAngele , sweepAngle, false, arcPaint) ; if (animatorSet == null || !animatorSet.isRunning()) {startAnimation() ;}}通过canvas.draw Arc 去绘制 startAngle则是绘制开始的角度 通过加上 incrementAngle这一个变量是为了更好去做动画控制。2.动画控制代码: (这个才是最重要的代码)private void startAnimation(){if (animatorSet != null && animatorSet.isRunning()) {animatorSet.cancel() ; // 取消动画 }animatorSet = new AnimatorSet() ; //设置一个动画集合AnimatorSet set = circuAnimator(); // 创建运行一圈动画的AnimatorSetanimatorSet.play(set) ; animatorSet.addListener(new AnimatorListener() {private boolean isCancel = false ; @Overridepublic void onAnimationStart(Animator animation) {}@Overridepublic void onAnimationRepeat(Animator animation) {}@Overridepublic void onAnimationEnd(Animator animation) {if (!isCancel) {startAnimation() ; // 不停的去循环动画}}@Overridepublic void onAnimationCancel(Animator animation) {isCancel = true ;}}) ;animatorSet.start() ;}//默认的动画时间private int DEFULT_DURATION = ;/** * 循环的动画 */private AnimatorSet circuAnimator(){//从小圈到大圈ValueAnimator holdAnimator1 = ValueAnimator.ofFloat(incrementAngele &#; DEFULT_MIN_ANGLE , incrementAngele &#; f) ; holdAnimator1.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {incrementAngele = (float) animation.getAnimatedValue() ;}}) ; holdAnimator1.setDuration(DEFULT_DURATION ) ; holdAnimator1.setInterpolator(new LinearInterpolator()) ;ValueAnimator expandAnimator = ValueAnimator.ofFloat(DEFULT_MIN_ANGLE , DEFULT_MAX_ANGLE) ;expandAnimator.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {sweepAngle = (float) animation.getAnimatedValue() ;incrementAngele -= sweepAngle ;invalidate() ; }}) ;expandAnimator.setDuration(DEFULT_DURATION) ;expandAnimator.setInterpolator(new DecelerateInterpolator(2)) ;//从大圈到小圈ValueAnimator holdAnimator = ValueAnimator.ofFloat(startAngle , startAngle &#; f) ;holdAnimator.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {startAngle = (float) animation.getAnimatedValue() ;}});holdAnimator.setDuration(DEFULT_DURATION ) ; holdAnimator.setInterpolator(new LinearInterpolator()) ;ValueAnimator narrowAnimator = ValueAnimator.ofFloat(DEFULT_MAX_ANGLE , DEFULT_MIN_ANGLE) ;narrowAnimator.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {sweepAngle = (float) animation.getAnimatedValue() ;invalidate() ; }}) ;narrowAnimator.setDuration(DEFULT_DURATION) ;narrowAnimator.setInterpolator(new DecelerateInterpolator(2)) ;AnimatorSet set = new AnimatorSet() ;set.play(holdAnimator1 ).with(expandAnimator) ;set.play(holdAnimator).with(narrowAnimator).after(holdAnimator1);return set ; }OK。这个实现思路主要就是Animator的动画运用,很简单的方式,可以随手练习一个Animator的使用。没有什么难点。网盘源码下载地址:

推荐整理分享android自定义之 5.0 风格progressBar(android 自定义drawable),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android自定义ui,android自定义控件入门与实战,android自定义控件步骤,android自定义属性详解,android自定义属性详解,android 自定义drawable,android 自定义dialog,android 自定义view三个方法,内容如对您有帮助,希望把文章链接给更多的朋友!

github地址:

android自定义之 5.0 风格progressBar(android 自定义drawable)

博客园地址:

版权声明:本文为博主原创文章,未经博主允许不得转载。

Intent启动系统组件(activity,service,BroadReceiver)-android学习之旅(四十九) android提供了统一的编程模型Intent来启动系统的组件,这样提供了松耦合性,是一种mvc的编程模式版权声明:本文为博主原创文章,未经博主允许不得转

Android学习【Android内核编译流程和错误笔记】 博客:

Android自定义之流式布局 流式布局,好处就是父类布局可以自动的判断子孩子是不是需要换行,什么时候需要换行,可以做到网页版的标签的效果。今天就是简单的做了自定义

标签: android 自定义drawable

本文链接地址:https://www.jiuchutong.com/biancheng/371004.html 转载请保留说明!

上一篇:随着ScrollView的滑动,渐渐的执行动画View(scrollview怎么用)

下一篇:Intent启动系统组件(activity,service,BroadReceiver)-android学习之旅(四十九)(通过intent可以启动哪些组件)

  • 应交税费是什么科目借贷方向
  • 主营业务怎么计算
  • 毛利率和主营利润率的区别
  • 市内打车费计入差旅费吗
  • 软件测试费计入什么科目
  • 一般纳税人旧货
  • 无偿使用房屋
  • 非货币性资产交换补价大于25%的会计处理
  • 费用暂估入账
  • 小规模纳税人按月申报还是按季申报
  • 企业所得税弥补亏损年限
  • 工会经费购买发的东西要算个税吗?
  • 建筑业增值税普通发票可以抵扣吗
  • 打印出来的明细账怎么装订
  • 提示没有安装QQ怎么处理
  • 促销服务费经营范围怎么写
  • 个人所得税费怎么计算2021
  • 售后回购的实质
  • 商场现金收入如何计算
  • 差额征收增值税如何申报
  • 销售费用营业费用的区别
  • 出租方的维修义务
  • 软件和硬件的成本按销售占比做分摊怎么算
  • 映泰主板bios设置硬盘启动
  • 关闭windows安全中心拦截
  • 提供建筑安装服务
  • PHP:Memcached::getResultCode()的用法_Memcached类
  • 土地增值税内控报告
  • 无形资产投资后退出
  • 银行罚息可不可以扣除
  • php中execute
  • 收到业绩补偿会扣税吗
  • js如何随机生成字符串
  • 员工工资扣工作服合法吗?
  • 生产成本结转后有余额吗
  • javaweb项目开发的原理
  • 深度学习的通道到底是什么?有什么用?(小白可看)
  • 使用微软必应需要哪些条件
  • 税法折旧和会计折扣会计分录
  • 小微企业所得税税率2.5% 10% 25%
  • 注册资金如何使用
  • 汇票没到期如何兑现
  • 企业残保金该什么时间交
  • sql server自动生成行号
  • 投标报名费如何缴纳
  • 企业成本计算的依据是什么
  • 银行承兑汇票的特点
  • 合理的物料消耗是指
  • 当月的进项票可以下月做账吗
  • 贷款收取服务费
  • 固定资产有尾款怎么入账
  • 建筑业成本必须分别核算么
  • 公司固定资产有很多种类,怎样计提折旧
  • solaris配置ip地址
  • m0b0player播放器
  • win8.1怎么设置自动关机
  • pull current
  • win8操作
  • win8的系统
  • win10系统右键菜单管理
  • linux安装与基本命令
  • extjs form textfield的隐藏方法
  • easyui给下拉框赋值
  • 简单解析空中三角测量的意义
  • javascript有哪些常用的属性和方法
  • 浅谈特殊儿童的融合教育论文
  • node.js使用的v8引擎是由哪个公司开发的
  • python re 查找
  • unity3d应用开发
  • js判断函数
  • 很全面的成语
  • js prev()
  • Intent传List、Map
  • js如何保留一位小数
  • 山西省地方税务局 先进 文明 李家庄税务所
  • 社保扣缴客户端下载
  • 实际金额与报关金额不符
  • 贸易型企业进项发票
  • 乌市沙区医保局电话是多少
  • 个人开具农产品普通发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设