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
Android中java執行緒的暫停與恢復
在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 Android (Android中的執行緒)
Android中的執行緒 序: 閱讀英文原版,受益匪淺。修飾詞形容惟妙惟肖。 其中舉例之圖,經典,且秒不可言。亦當細細品味之。 翻譯為谷歌翻譯。 重點單詞日後補上,可用有道詞典積累,認識的單詞會越來越多
Android中設定啟動動畫
以Alphaanimation為例 思路:在啟動時設定一個Activity作為動畫的載體,在動畫結束後跳轉到另一個介面。 XML佈局:在佈局中加入一個ImageView,fill_parent <ImageView an
android中DeskClock的一些bug解決方案
本文中涉及的DeskClock為android中源生時鐘。 問題一: 【操作步驟】clock->右下角圖示->settings->snooze length->滑動選擇任意時間(不是預設值)->橫屏 【實際結果】橫屏後時間數值恢復為之
Android中UI執行緒與後臺執行緒互動設計的5種方法
我想關於這個話題已經有很多前輩討論過了。今天算是一次學習總結吧。 在android的設計思想中,為了確保使用者順滑的操作體驗。一些耗時的任務不能夠在UI執行緒中執行,像訪問網路就屬於這類任務。因此我們必須要重新開啟一個後臺執行緒執行這些任務。然而,往往這些任務最終又會直
android中ListView多次重新整理多次重複執行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() { @
Android中GridView中onTouch監聽(1)item實現觸控執行縮放動畫的功能
功能:當用戶點選元素,執行圖片縮放動畫,當按住元素並且移開位置離開該元素,之前元素將執行放大回到原狀,而新選中的元素將進行縮放。 效果圖 即:gridview中的元素按住就會下陷變小,移動離開就會變回原樣,點選就會進入跳轉介面 由於為了完整的監聽ontouch事件,即能監