本文记录一个动画产生的递归错误

系统:

Android 4.4 部分机型

错误日志

java.lang.StackOverflowErrorat android.view.GLES20DisplayList.setScaleX(GLES20DisplayList.java:280)at android.view.ViewPropertyAnimator.setValue(ViewPropertyAnimator.java:926)at android.view.ViewPropertyAnimator.access$900(ViewPropertyAnimator.java:48)at android.view.ViewPropertyAnimator$AnimatorEventListener.onAnimationUpdate(ViewPropertyAnimator.java:1089)at android.animation.ValueAnimator.animateValue(ValueAnimator.java:1251)at android.animation.ValueAnimator.animationFrame(ValueAnimator.java:1175)at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1216)at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:524)at android.animation.ValueAnimator.start(ValueAnimator.java:936)at android.animation.ValueAnimator.start(ValueAnimator.java:946)at android.view.ViewPropertyAnimator.startAnimation(ViewPropertyAnimator.java:820)at android.view.ViewPropertyAnimator.start(ViewPropertyAnimator.java:400)at com.benqu.wuta.views.LoadingView$1.onAnimationEnd(LoadingView.java)at android.view.ViewPropertyAnimator$AnimatorEventListener.onAnimationEnd(ViewPropertyAnimator.java:1030)at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1056)at android.animation.ValueAnimator.cancel(ValueAnimator.java:969)at android.view.ViewPropertyAnimator.animatePropertyBy(ViewPropertyAnimator.java:882)at android.view.ViewPropertyAnimator.animateProperty(ViewPropertyAnimator.java:838)at android.view.ViewPropertyAnimator.alpha(ViewPropertyAnimator.java:662)at com.benqu.wuta.views.LoadingView$1.onAnimationEnd(LoadingView.java)at android.view.ViewPropertyAnimator$AnimatorEventListener.onAnimationEnd(ViewPropertyAnimator.java:1030)at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1056)at android.animation.ValueAnimator.cancel(ValueAnimator.java:969)at android.view.ViewPropertyAnimator.animatePropertyBy(ViewPropertyAnimator.java:882)at android.view.ViewPropertyAnimator.animateProperty(ViewPropertyAnimator.java:838)at android.view.ViewPropertyAnimator.alpha(ViewPropertyAnimator.java:662)at com.benqu.wuta.views.LoadingView$1.onAnimationEnd(LoadingView.java)at android.view.ViewPropertyAnimator$AnimatorEventListener.onAnimationEnd(ViewPropertyAnimator.java:1030)at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1056)at android.animation.ValueAnimator.cancel(ValueAnimator.java:969)at android.view.ViewPropertyAnimator.animatePropertyBy(ViewPropertyAnimator.java:882)at android.view.ViewPropertyAnimator.animateProperty(ViewPropertyAnimator.java:838)at android.view.ViewPropertyAnimator.alpha(ViewPropertyAnimator.java:662)at com.benqu.wuta.views.LoadingView$1.onAnimationEnd(LoadingView.java)at android.view.ViewPropertyAnimator$AnimatorEventListener.onAnimationEnd(ViewPropertyAnimator.java:1030)

再看一下代码

public void startAnimation(){postInvalidate();this.animate().scaleX(1.2f).scaleY(1.2f).alpha(0.5f).setListener(animatorListener).start();}private Animator.AnimatorListener animatorListener = new Animator.AnimatorListener() {@Overridepublic void onAnimationStart(Animator animation) {}@Overridepublic void onAnimationEnd(Animator animation) {animate().scaleX(1f).scaleY(1f).alpha(1f).setListener(null).setDuration(0).start();setVisibility(GONE);}@Overridepublic void onAnimationCancel(Animator animation) {}@Overridepublic void onAnimationRepeat(Animator animation) {}};

分析 递归环路

ViewPropertyAnimator.alpha -> onAnimationEnd -> ViewPropertyAnimator.alpha ...

是4.4的系统 调用了 alpha 动画后调用 onAnimationEnd

解决:先取消 回调

animate().setListener(null).
scaleX(1f).scaleY(1f).alpha(1f).setDuration(0).start();

Android Error之动画递归相关推荐

  1. android淡入淡出动画_在Android中淡入动画示例

    android淡入淡出动画 1) XML File: activity_main 1)XML文件:activity_main <?xml version="1.0" enco ...

  2. Android 图片弹跳动画

    这几天看到一个小动画,觉得有点意思,就自己实现来看看,先看效果图 OK,这个效果基本功能就是,一个图片,从顶部掉下来,完后弹几下,再停止,实现起来还是比较简单的,不过也走了点小弯路,这里记录下. 有段 ...

  3. Android中的动画详析-kotlin的demo

    Android中的动画可以分为三种,View动画,帧动画,以及属性动画,实际上帧动画也是View动画的一种,只不过二者表现形式不同,View动画是通过不断地对场景里的动画做图像转换从而产生动画效果是一 ...

  4. unity 物理台球_使用基于Android物理的动画制作类似于桌球的游戏

    unity 物理台球 学习Android开发 (Learning Android Development) While playing around with Android Physics-base ...

  5. Android Animation (安卓动画)概念简介

    Android Animation Android 四种动画分别为逐帧动画和补间动画.属性动画.过渡动画: Frame Animation (逐帧动画) 实现方式:xml 和 Java代码 图片跳转的 ...

  6. Android 补间动画(Tween Animation)

    Tween Animation(补间动画): Tween动画,通过对View的内容进行一系列的图形变换 (包括平移.缩放.旋转.改变透明度)来实现动画效果.动画效果的定义可以采用XML来做也可以采用编 ...

  7. Android 逐帧动画(Frame)

    Android 逐帧动画(Frame)  很好理解就是将多张图片放到一个容器里面通过控制这些图片一帧一张图片从而形成动画 使用的使用通过AnimationDrawable 加载放好的图片 然后通过调用 ...

  8. 每日一道面试题(第7期)---Android补间动画与属性动画的区别

    零零碎碎的东西总是记不长久,仅仅学习别人的文章也只是他人咀嚼后留下的残渣.无意中发现了这个每日一道面试题,想了想如果只是简单地去思考,那么不仅会收效甚微,甚至难一点的题目自己可能都懒得去想,坚持不下来 ...

  9. Android下的动画

    ------你需要努力,你还没资格休息----- Android下的动画有三种: tween补间动画.frame帧动画.property属性动画(Android3.0后提出来的).补间动画: Tran ...

最新文章

  1. 让Squid 显示本地时间
  2. 其他算法-SVD奇异值分解
  3. Seaborn可视化使用relplot函数可视化数据长度不同的时间序列实战:two Pandas Series of different lengths
  4. 域计算机开机默认用户,怎么实现让域账户开机自动登陆
  5. java奇数偶数数组_在Java数组中将数组中的奇数置后偶数置前(两种不同的方法实现)...
  6. golang int64转string_(一)Golang从入门到原地起飞
  7. matlab guide 打开图像并将图像显示到界面
  8. 拍照购物APP之可行性分析
  9. 史上最贵域名诞生!360斥资1700万美元买360.com
  10. Navicat PatchNavicat
  11. Activiti(一)SpringBoot2集成Activiti6
  12. spring FileCopyUtils类 上传图片
  13. 掌握了这30道MySQL基础面试题,我成了面霸
  14. python万年历代码带解释_带闹钟的单片机万年历代码说明(详细注释)
  15. 从聚合数据请求菜谱大全接口数据,解析显示到ListView
  16. 高考新生,天津独立院校转设:南开大学滨海学院转设并入南大本部
  17. 百度没有文化(转载)
  18. 一只喵的西行记-4 蛋蛋的忧桑
  19. 计算机设备的工作原理,计算机工作原理
  20. 2018“云移杯- 景区口碑评价分值预测

热门文章

  1. 人工智能机器人-智能时代的新纪元
  2. 陈年:追随PPG 直销衬衫拒绝烧钱
  3. Matlab绘图——填充相交区域
  4. 软件测试最新项目合集【商城、外卖、银行、金融等等.......】
  5. Axure的动态面板
  6. 【FPGA教程案例28】基于FPGA的DDS直接数字频率合成器之一——原理介绍
  7. 熵增定律:对个人成长的启发
  8. Uipath操作浏览器
  9. 分享保护视力应用桌面
  10. 找出1000以内的所有质数,并且统计1000以内质数的个数