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

转载请注明出处: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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值