zoukankan      html  css  js  c++  java
  • 解决使用属性动画没有效果,监听发现属性值未发生改变问题

    转载请注明出处: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的设备,不妨也顺着这样的思路,尝试解决一下。

    如有纰漏,敬请海涵。

  • 相关阅读:
    函数式组件中的class与style处理
    学习CSS(二)
    mysql优化二
    mysql优化一
    spring解决循环依赖
    Java多线程2:Thread中的实例方法
    当try、catch中有return时,finally中的代码会执行么?
    Java多线程1:进程与线程
    手写springmvc
    手写spring
  • 原文地址:https://www.cnblogs.com/iwiniwin/p/10793664.html
Copyright © 2011-2022 走看看