解决使用属性动画没有效果,监听发现属性值未发生改变问题


转载请注明出处:http://blog.csdn.net/fightlei/article/details/52554199

最近在学习用自定义View做一些效果,需要在onDraw()方法中使用属性动画,只是一个简单的需求却遇到了问题。

例如仅仅是使用ValueAnimator.ofFloat()方法,做一个值改变的功能,在onDraw()方法中添加如下代码:

@Override
protected void onDraw(Canvas canvas) {
    ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);  
    anim.setDuration(300);  
    anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  
        @Override  
        public void onAnimationUpdate(ValueAnimator animation) {  
            float currentValue = (float) animation.getAnimatedValue();  
            Log.d("TAG", "cuurent value is " + currentValue);  
        }  
    });  
    anim.start();  
}


很简单的一段代码,但是运行却出现问题,通过打印日志

current value is 1.0

current value is 1.0

发现仅打印了两次,且值一直是endValue 1.0

起初以为是由于在onDraw()方法中使用属性动画,有什么特殊的地方。于是我在构造方法中添加了如上所示相同的代码,果然运行正常,值在duration 300内从0.0变化到了1.0。如果大家看到这里也认为是因为在onDraw()方法中使用导致的,那就和我一样走向不归路了。后来查看别人的博客,发现同样有在onDraw()中使用属性动画的,却没有出现我这样的问题。问题奇怪就在这里,在有些方法中调用相同的代码完全正常,但是在一些方法如onDraw()方法,onClick()方法中调用就会出现值变化只有最终值的问题。

之后纠结了几天又试了许多办法都无果。网上搜了许久,也没有找到类似的问题。

今天偶然在StackOverflow上找到了这个问题的解决办法,所以记录下来。

原来是使用的调试设备的问题,我使用的是真机Samsung Galaxy S4,在该设备的设置->开发者选项,其中有一项是Animator duration scale(动画影像时间伸缩效果),这个值默认是关闭的,我们只需要将该值修改成动画比例1x或其他值即可。

如果有读者也遇到了类似的问题,但不是s4的设备,不妨也顺着这样的思路,尝试解决一下。

如有纰漏,敬请海涵。

优质内容筛选与推荐>>
1、CentOS安装和部署SVN服务器
2、Tomcat WEB搭建+Nginx负载均衡动静分离+DNS解析的实验
3、【NOI2011T4】道路修建-树形DP
4、vue+iview 模糊搜索
5、win7与ubuntu共享文件夹


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号