解決使用屬性動畫沒有效果,監聽發現屬性值未發生改變問題

轉載請註明出處: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的設備,不妨也順着這樣的思路,嘗試解決一下。

如有紕漏,敬請海涵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章