1. 程式人生 > >Android中重複執行動畫bug

Android中重複執行動畫bug

在android中我們要經常用到看似一個沒有時間限制的重複動畫,如最常見的下拉重新整理和上拉載入更多的loading載入動畫:

    今天嘗試了三種動畫(以旋轉為例):
package com.example.anim.anim;

import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.view.View;
import android.view.animation.Animation;
import
android.view.animation.LinearInterpolator; import android.view.animation.RotateAnimation; /** * Created by houruixiang on 2017/8/15. */ public class SimpleAnim { private static ValueAnimator valueAnimator; public static void startAnim(View view){ RotateAnimation rotateAnimation = new
RotateAnimation(0, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); rotateAnimation.setDuration(2000); rotateAnimation.setFillAfter(true); rotateAnimation.setRepeatCount(-1); view.startAnimation(rotateAnimation); } public static
void startOjAnim(View view){ ObjectAnimator rotation = ObjectAnimator.ofFloat(view, "rotation", 0, 360f); rotation.setDuration(2000); rotation.setRepeatCount(-1); rotation.start(); } public static void startValueAnim(final View view){ valueAnimator = ValueAnimator.ofFloat(0f, 360.0f); //valueAnimator.setTarget(view); //valueAnimator.setRepeatMode(ValueAnimator.RESTART); valueAnimator.setRepeatCount(ValueAnimator.INFINITE); valueAnimator.setDuration(1000); valueAnimator.start(); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { float animatedValue = (float) valueAnimator.getAnimatedValue(); view.setRotation(animatedValue); } }); } }

都存在這個問題,之前遇到這個問題,會誤認為是補間動畫和屬性動畫的差別,今天試了之後,都一樣;抑或是restart的延遲造成的
其實都不是,只是動畫的執行不是勻速的,所以當設定一個勻速插值器之後就完美解決問題;看下面程式碼(以valueAnimation為例):

public static void startValueAnim(final View view){
        valueAnimator = ValueAnimator.ofFloat(0f, 360.0f);
        //valueAnimator.setTarget(view);
        //valueAnimator.setRepeatMode(ValueAnimator.RESTART);
        valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
        valueAnimator.setDuration(1000);
        valueAnimator.setInterpolator(new LinearInterpolator());
        valueAnimator.start();
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                float animatedValue = (float) valueAnimator.getAnimatedValue();
                view.setRotation(animatedValue);
            }
        });


    }

關鍵程式碼:valueAnimator.setInterpolator(new LinearInterpolator());
ok,比較簡單,感謝閱讀,共同進步

相關推薦

Android重複執行動畫bug

在android中我們要經常用到看似一個沒有時間限制的重複動畫,如最常見的下拉重新整理和上拉載入更多的loading載入動畫: 今天嘗試了三種動畫(以旋轉為例): package com.example.anim.anim; import and

Android執行緒與執行緒池

執行緒與執行緒池 概括 執行緒分為主執行緒和子執行緒. 主執行緒主要是用來處理和介面相關的事情, 子執行緒主要是用來做耗時的操作,比如 載入遠端資料,資料庫操作等。 在android 中,處理直接使用 Thread以外。 android 還提供了很多類似執行緒的操作便於我們

Android執行緒通訊:Handler的理解

Android中的Handler Android中Handler在我理解主要是為了解決執行緒間通訊。 使用Android的Handler機制主要要了解幾個類: Looper: 一個執行緒對應一個或者0個Looper,主執行緒在ActivityThread的時候會預設建立一個L

解決java Android 同一個執行緒多次執行問題

在java中同一個執行緒只能被start()一次,當第二次start()就會報異常。但是我們的軟體需求常常需要同一個執行緒多次執行同一個方法。為此可以使用notify(),wait()方法來達到我們想要的效果。先看程式碼public class ThreadTest ext

Androidjava執行緒的暫停與恢復

在Android中有時我們會遇到類似這樣的問題,我要繪製一個曲線圖,但是我想讓它可以被暫停和繼續。首先,繪圖肯定得用到多執行緒的知識。java的Thread類中自帶suspend和resume兩個方法來實現執行緒的暫停和恢復,可惜的是,現在已經不被建議使用了,而

Android執行緒訪問資料庫、DBHelper

DBHelper: package com.ruru.sqlitedemo; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.dat

Android顯示GIF動畫

gif圖動畫在android中還是比較常用的,比如像新浪微博中,有很多gif圖片,而且展示非常好,所以我也想弄一個。經過我多方的搜尋資料和整理,終於弄出來了,其實github上有很多開源的gif的展示程式碼,我下載過幾個,但是都不是很理想,不是我完全想要的。所以有時候就得自

Android使用執行緒池來管理執行

背景:每出現一個耗時操作都去建立一個新的執行緒必然不優美,既沒有高併發,對資源的共享和競爭也是比較混亂。總之: a. 每次new Thread新建物件效能差。 b. 執行緒缺乏統一管理,可能無限制新建執行緒,相互之間競爭,及可能佔用過多系統資源導致宕機或oo

Android 關於屬性動畫的一些思考,或許能為你解決一定的效能問題

——學之開源,用於開源;初學者的心態,與君共勉!======================================================== 序 用動畫用的久了漸漸的喜歡上她了,雖然它或許並不是女的,但我希望是~~ 用的久了,我漸漸的思考效能的問題

Android使用抖動動畫吸引來使用者注意

在應用中,有時候我們要吸引使用者去點選某些按鈕,比如應用市場的推薦按鈕,為了能夠吸引使用者主動點選而且不過分的打擾使用者,最好的方法就是給我們想吸引使用者注意的view新增一些抖動動畫,比如這張圖 這裡我主要實現了兩種抖動動畫,左右抖動和上下抖動。左右抖動通常用於表單驗證

Android 執行緒的簡單使用

一、多執行緒的實現 1.最簡單的啟動一下新執行緒 private void startNewThread(){ new Thread(){ @Override public void

Android執行緒在程式的使用

什麼是多執行緒?     * 我們可以形象的把多執行緒的執行,形容為:在互相搶CPU的資源,這就是多執行緒的特性:隨機性。     * 就是誰搶到,誰執行,至於執行多長時間,CPU說了算。為什麼要使用多執行緒?這麼解釋問題吧:1。單程序單執行緒:一個人在一個桌子上吃菜。2。單

《Efficient Android Threading》Chapter 3---Threads on AndroidAndroid執行緒)

Android中的執行緒 序:        閱讀英文原版,受益匪淺。修飾詞形容惟妙惟肖。        其中舉例之圖,經典,且秒不可言。亦當細細品味之。        翻譯為谷歌翻譯。 重點單詞日後補上,可用有道詞典積累,認識的單詞會越來越多  

Android設定啟動動畫

以Alphaanimation為例 思路:在啟動時設定一個Activity作為動畫的載體,在動畫結束後跳轉到另一個介面。 XML佈局:在佈局中加入一個ImageView,fill_parent <ImageView an

androidDeskClock的一些bug解決方案

  本文中涉及的DeskClock為android中源生時鐘。   問題一: 【操作步驟】clock->右下角圖示->settings->snooze length->滑動選擇任意時間(不是預設值)->橫屏 【實際結果】橫屏後時間數值恢復為之

AndroidUI執行緒與後臺執行緒互動設計的5種方法

我想關於這個話題已經有很多前輩討論過了。今天算是一次學習總結吧。 在android的設計思想中,為了確保使用者順滑的操作體驗。一些耗時的任務不能夠在UI執行緒中執行,像訪問網路就屬於這類任務。因此我們必須要重新開啟一個後臺執行緒執行這些任務。然而,往往這些任務最終又會直

androidListView多次重新整理多次重複執行getView的問題另解

        以前倒是沒有注意listview的getView會重複執行多次,這次因為佈局比較複雜,所以在測試的時候去斷點跟蹤,發現同一條資料不斷的重複執行。覺得很奇怪,於是上網搜尋了一下。網上的解釋基本一致,就是ListView佈局時height和width都不是fil

android屬性動畫bug,以及ViewCompat

ViewCompat這個類,是andorid對於動畫類操作的相容類,今天寫了一個側拉框,出現的一個bug    今天一不小心遇見一個bug,這個bug如下 正常情況下慢慢畫動畫可以用,但是快速化,動畫就停止了, 今天先貼程式碼,明天貼圖 final CycleInte

Android每隔一段時間重複執行

Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @

AndroidGridViewonTouch監聽(1)item實現觸控執行縮放動畫的功能

功能:當用戶點選元素,執行圖片縮放動畫,當按住元素並且移開位置離開該元素,之前元素將執行放大回到原狀,而新選中的元素將進行縮放。 效果圖 即:gridview中的元素按住就會下陷變小,移動離開就會變回原樣,點選就會進入跳轉介面 由於為了完整的監聽ontouch事件,即能監