亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android 屬性動畫原理與DataBinding

 更新時間:2017年04月11日 08:55:55   投稿:lqh  
這篇文章主要介紹了Android 屬性動畫原理與DataBinding的相關(guān)資料,需要的朋友可以參考下

Android 屬性動畫原理與DataBinding

看到這個標(biāo)題的時候你可能會有疑問,屬性動畫和 DataBinding 之間有什么關(guān)系?我個人理解的是:它們內(nèi)部的實(shí)現(xiàn)思想有相似之處。這篇文章主要對 Android 屬性動畫的知識通過文字進(jìn)行整理記錄,內(nèi)容參考于《Android開發(fā)藝術(shù)探索》,在最后會給出我如此理解屬性動畫和 DataBinding 的原因。

Android動畫概述:

Android 的動畫可以分為三種:View 動畫、幀動畫和屬性動畫,View 動畫通過對場景里的對象不斷做圖像變化(平移、縮放、旋轉(zhuǎn)、透明度)從而產(chǎn)生動畫效果,View 動畫支持自定義。幀動畫通過順序播放一系列圖像產(chǎn)生動畫效果,可以簡單理解為圖片切換動畫,圖片過大會導(dǎo)致 OOM。屬性動畫通過動態(tài)的改變對象的屬性從而達(dá)到動畫效果,屬性動畫為API 11的新特性,在低版本需要通過兼容庫來使用它。

屬性動畫:

屬性動畫可以對任意對象的屬性進(jìn)行動畫而不僅僅是 View,在一個時間間隔內(nèi)可以完成對象從一個屬性值到另一個屬性值的改變。因此屬性動畫幾乎是無所不能的,只要對象有這個屬性,它都能實(shí)現(xiàn)動畫效果。、

使用:

屬性動畫中有 ValueAnimator 、ObjectAnimator 和 AnimatorSet 等概念,其中 ObjectAnimator 繼承自 ValueAnimator,用來是實(shí)現(xiàn)一個屬性動畫,AnimatorSet 是動畫集合,可以定義一組動畫,它們使用起來是及其簡單的,在此不再舉例。屬性動畫除了通過代碼實(shí)現(xiàn)以外,同View動畫一樣,也可以通過XML來定義,屬性動畫需要定義在res/animator目錄下,其中的 set、objectAnimator 和 animator 標(biāo)簽分別對應(yīng) AnimatorSet、ObjectAnimator 和 ValueAnimator 。盡管屬性動畫可以通過XML來實(shí)現(xiàn),但在實(shí)際開發(fā)中往往會采用代碼來實(shí)現(xiàn),因?yàn)楹芏鄷r候一個屬性的起始值是無法提前確定的。

插值器和估值器:

TimeInterpolator 譯為時間插值器,它的作用是根據(jù)時間流逝的百分比來計(jì)算出當(dāng)前屬性值改變的百分比,系統(tǒng)預(yù)置的有 LinearInterpolator (線性插值器:勻速動畫)、 AccelerateDecelerateInterpolator (加速減速插值器:動畫兩頭慢中間快)和 DecelerateInterpolator (減速插值器:動畫越來越慢)等。

TypeEvaluator 譯為類型估值算法,也叫估值器,它的作用是根據(jù)當(dāng)前屬性改變的百分比來計(jì)算改變后的屬性值,系統(tǒng)預(yù)置的有 IntEvaluator (針對整型屬性)、 FloatEvaluator (針對浮點(diǎn)型屬性)和ArgbEvaluator (針對 Color 屬性)。屬性動畫中的插值器( Interpolator )和估值器( TypeEvaluator )很重要,它們是實(shí)現(xiàn)非勻速動畫的重要手段。

屬性動畫的監(jiān)聽器:

屬性動畫提供了監(jiān)聽器來監(jiān)聽動畫的播放過程,主要有AnimatorUpdateListenerAnimatorListener 。AnimatorListener 可以監(jiān)聽動畫的開始、結(jié)束、取消以及重復(fù)播放 ,同時為了方便開發(fā),系統(tǒng)還提供了 AnimatorListenerAdapter 這個類,他是 AnimatorListener 的適配器類, 可以有選擇的實(shí)現(xiàn)這四個監(jiān)聽方法。AnimatorUpdateListener 比較特殊,他會監(jiān)聽整個動畫過程, 動畫是由許多幀組成的,每播放一幀對應(yīng)監(jiān)聽方法就會被調(diào)用一次。

對任意屬性做動畫:

屬性動畫可以對任意屬性添加動畫效果,假如我們要給一個 button 加一個動畫,讓這個 button 的寬度增加 100px,我們可能會這樣寫:

@Override
public void onClick(View v){

   ObjectAnimator.ofInt(v,"width",100).setDuration(1000).start();

}

但是當(dāng)點(diǎn)擊按鈕后并沒有效果,不是說好的可以對任意屬性實(shí)現(xiàn)動畫嘛,其實(shí)沒效果是對的,下面分析屬性動畫的原理:屬性動畫要求動畫作用的對象提供該屬性的 get 和 set 方法,屬性動畫根據(jù)外界傳遞的該屬性的初始值和最終值,以動畫的效果多次去調(diào)用 set 方法,每次傳遞給 set 方法的值都不一樣,確切的來說是隨著時間的推移,所傳遞的值越來越接近最終值。總結(jié)一下,我們對 object 的屬性 abc 做動畫,如果想讓動畫生效,要同時滿足以下兩個條件:

1.object 必須提供 setAbc 方法,如果動畫的時候沒有傳遞初始值,那么還要提供 getAbc 方法,因?yàn)橄到y(tǒng)要去取 abc 屬性的初始值(若這條不滿足,程序直接 Crash)

2.object 的 setAbc 對屬性 abc 所做的改變必須能夠通過某種方法反映出來,比如會帶來 UI 的改變之類的(如果這條不滿足,動畫無效果但不會Crash)

這跟 DataBinding 中的思想是一樣的,這里的object對應(yīng)于DataBinding中的 ViewModel,ViewModel 的成員變量 set 方法中需要提醒 DataBinding 去更新 view 的內(nèi)容,如下:

  public void setName(String name) {
    this.name = name;
    notifyPropertyChanged(BR.name);

  }

針對以上問題,官方文檔告訴我們有3種解決方法:

  1. 給你的對象加上 get 和 set 方法,如果有權(quán)限的話
  2. 用一個類來包裝原始對象,間接為其提供 get 和 set 方法
  3. 采用 ValueAnimator,監(jiān)聽動畫過程,自己實(shí)現(xiàn)屬性的改變

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Android 解決嵌套Fragment無法接收onCreateOptionsMenu事件的問題

    Android 解決嵌套Fragment無法接收onCreateOptionsMenu事件的問題

    本文主要介紹Android Fragment無法接收onCreateOptionsMenu事件的問題,這里給出解決辦法以及詳細(xì)代碼,希望能幫助有需要的小伙伴
    2016-07-07
  • Kotlin的枚舉與異常示例詳解

    Kotlin的枚舉與異常示例詳解

    這篇文章主要給大家介紹了關(guān)于Kotlin的枚舉與異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Kotlin具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Android ListView的OnItemClickListener詳解

    Android ListView的OnItemClickListener詳解

    這篇文章主要介紹了Android ListView的OnItemClickListener詳解的相關(guān)資料,涉及到OnItemClickListener的position和id參數(shù)做詳細(xì)的解釋的知識點(diǎn),非常不錯,具有參考借鑒價值,需要的朋友參考下
    2016-07-07
  • Android保存App異常信息到本地

    Android保存App異常信息到本地

    這篇文章主要為大家詳細(xì)介紹了Android保存App異常信息到本地,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Android仿QQ附近的人搜索展示功能

    Android仿QQ附近的人搜索展示功能

    這篇文章主要介紹了Android仿QQ附近的人搜索展示功能的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • Android實(shí)現(xiàn)點(diǎn)擊WebView界面中圖片滑動瀏覽與保存圖片功能

    Android實(shí)現(xiàn)點(diǎn)擊WebView界面中圖片滑動瀏覽與保存圖片功能

    大家在日常使用spp流量文章的時候經(jīng)常會遇到這樣的一個功能,點(diǎn)擊文章的圖片進(jìn)入圖片的瀏覽模式,可以左右滑動圖片瀏覽,并且可以實(shí)現(xiàn)保存圖片的功能,所以本文主要就介紹了在Android如何實(shí)現(xiàn)點(diǎn)擊WebView界面中圖片滑動瀏覽與保存圖片功能,需要的朋友可以參考下。
    2017-04-04
  • android實(shí)現(xiàn)年齡段選擇器

    android實(shí)現(xiàn)年齡段選擇器

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)年齡段選擇器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Android滑動拼圖驗(yàn)證碼控件使用方法詳解

    Android滑動拼圖驗(yàn)證碼控件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Android滑動拼圖驗(yàn)證碼控件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Android studio配置lambda表達(dá)式教程

    Android studio配置lambda表達(dá)式教程

    Java 8的一個大亮點(diǎn)是引入Lambda表達(dá)式,使用它設(shè)計(jì)的代碼會更加簡潔。接下來通過本文給大家介紹Android studio配置lambda表達(dá)式教程,需要的朋友參考下吧
    2017-05-05
  • Java ArrayList源碼深入分析

    Java ArrayList源碼深入分析

    ArrayList 類是一個可以動態(tài)修改的數(shù)組,與普通數(shù)組的區(qū)別就是它是沒有固定大小的限制,我們可以添加或刪除元素。ArrayList 繼承了 AbstractList,并實(shí)現(xiàn)了List接口
    2022-08-08

最新評論