調(diào)整全局動畫時長引起的問題

android可以在開發(fā)者選項-動畫程序時長調(diào)整修改動畫縮放時間攘蔽,也可以關(guān)閉動畫龙屉。如圖:


image.png

修改之后會影響Animator,不影響Animation满俗。如果關(guān)閉動畫转捕,也會影響Lottie動畫。

如何影響Animator

在創(chuàng)建窗口或者動畫縮放改變之后唆垃,系統(tǒng)會調(diào)用ValueAnimator. setDurationScale設置app全局的縮放比例五芝,并把值保存到sDurationScale。

image.png

image.png
@TestApi
    public static void setDurationScale(float durationScale) {
        sDurationScale = durationScale;
    }

在ValueAnimator.doAnimationFrame方法計算動畫辕万,獲取經(jīng)過縮放的時間間隔枢步,如果時間間隔為0,則標記為結(jié)束蓄坏,整個動畫也就結(jié)束了价捧。立刻觸發(fā)AnimatorListener的onAnimationStart和onAnimationEnd方法

image.png
private long getScaledDuration() {
        return (long)(mDuration * resolveDurationScale());
    }

private float resolveDurationScale() {
        return mDurationScale >= 0f ? mDurationScale : sDurationScale;
    }

如何影響Lottie

LottieAnimationView在初始化時會判斷系統(tǒng)的縮放是否為0丑念,并設置到LottieDrawable.systemAnimationsEnabled涡戳。

lottieDrawable.setSystemAnimationsAreEnabled(Utils.getAnimationScale(getContext()) != 0f)
public final class Utils {
    public static float getAnimationScale(Context context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
          return Settings.Global.getFloat(context.getContentResolver(),
                  Settings.Global.ANIMATOR_DURATION_SCALE, 1.0f);
        } else {
          //noinspection deprecation
          return Settings.System.getFloat(context.getContentResolver(),
                  Settings.System.ANIMATOR_DURATION_SCALE, 1.0f);
        }
    }
}

在調(diào)用playAnimation方法時,如果systemAnimationsEnabled為false則會直接直接調(diào)用endAnimation方法脯倚。立刻觸發(fā)AnimatorListener的onAnimationStart和onAnimationEnd方法

@MainThread
  public void playAnimation() {
    if (compositionLayer == null) {
      lazyCompositionTasks.add(new LazyCompositionTask() {
        @Override
        public void run(LottieComposition composition) {
          playAnimation();
        }
      });
      return;
    }

    if (systemAnimationsEnabled || getRepeatCount() == 0) {
      animator.playAnimation();
    }
    if (!systemAnimationsEnabled) {// 系統(tǒng)設置關(guān)閉了動畫渔彰,執(zhí)行endAnimation
      setFrame((int) (getSpeed() < 0 ? getMinFrame() : getMaxFrame()));
      animator.endAnimation();
    }
  }

如何修復Animator

反射調(diào)用ValueAnimator的靜態(tài)方法setDurationScale,把sDurationScale設置為1.0f

如何修復Lottie

反射從LottieAnimationView獲取lottieDrawable推正,然后反射設置lottieDrawable.systemAnimationsEnabled為true

是否可以修改系統(tǒng)屬性恍涂?

修改Settings.Global.ANIMATOR_DURATION_SCALE需要權(quán)限android.permission.WRITE_SECURE_SETTINGS,但是這個權(quán)限只能系統(tǒng)app申請植榕,所以普通app不能修改這個屬性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末再沧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尊残,更是在濱河造成了極大的恐慌炒瘸,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寝衫,死亡現(xiàn)場離奇詭異顷扩,居然都是意外死亡,警方通過查閱死者的電腦和手機慰毅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門隘截,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事婶芭《危” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵雕擂,是天一觀的道長啡邑。 經(jīng)常有香客問我,道長井赌,這世上最難降的妖魔是什么谤逼? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮仇穗,結(jié)果婚禮上流部,老公的妹妹穿的比我還像新娘。我一直安慰自己纹坐,他們只是感情好枝冀,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耘子,像睡著了一般果漾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谷誓,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天绒障,我揣著相機與錄音,去河邊找鬼捍歪。 笑死户辱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的糙臼。 我是一名探鬼主播庐镐,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼变逃!你這毒婦竟也來了必逆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤揽乱,失蹤者是張志新(化名)和其女友劉穎名眉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锤窑,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡璧针,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了渊啰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片探橱。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡申屹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出隧膏,到底是詐尸還是另有隱情哗讥,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布胞枕,位于F島的核電站杆煞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腐泻。R本人自食惡果不足惜决乎,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望派桩。 院中可真熱鬧构诚,春花似錦、人聲如沸铆惑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽员魏。三九已至丑蛤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撕阎,已是汗流浹背受裹。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留闻书,地道東北人名斟。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓脑慧,卻偏偏與公主長得像魄眉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子闷袒,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355