国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

動畫二-屬性動畫

2019-11-09 18:05:32
字體:
來源:轉載
供稿:網友

一時間插值器(TimeInterpolator)的作用是根據時間流逝的百分比計算出動畫進度的百分比。

public class LinearInterpolator implements Interpolator{    @Override    public float getInterpolation(float v) {        return v;    }}如線性插值器,輸入v則返回v.(項目總時間過了40%,則項目進度也達到了40%)

二。類型估值器(TypeEvaluator)的作用是根據屬性值改變的百分比計算出改變后的屬性值。

public class IntEvaluator implements TypeEvaluator<Integer>{public Integer evaluate(float fraction,Integer startValue,Integer endValue){int startInt = startValue;return (int)(startInt + fracion * (endValue - startValue));}}屬性動畫通過以上兩類就可以完成輸入當前時間計算出當前屬性最終值得計算。

三。屬性動畫ObjectAnimator的start方法中,

首先判斷當前動畫,等待動畫,延遲動畫中是否有和當前動畫相同的動畫,有就把該相同動畫取消。接著調用父類ValueAnimator的start方法

        在ValueAnimator的start方法中要使用handler,所以要保證運行在有 Looper的線程中

        它會調用一個run方法和底層交互,并調用ValueAnimator的doAnimationFrame方法。

        doAnimationFrame中會根據不同的狀態返回或計算當前的時間作為參數調用animateValue方法

animateValue會調用calulateValue方法計算每幀動畫對應的屬性值,

最后會以反射的方式調用set方法對對象的屬性進行設置

如果屬性的初始值沒有設置,則get方法會被調用,在PRopertyValuesHolder的setupValue中。

動畫下一幀到來時,set方法被調用,PropertyValuesHolder的setAnimatedValue中。

四。對象可以對其任何屬性使用屬性動畫,但要保證該對象具有該屬性的set和get方法,并且set方法會以某種方式最終影響到該對象的UI。

1.當對象不具有set,get屬性時,可以用類包裝該類,使其間接具有get和set方法

//包裝View類 用于給屬性動畫調用 從而包裝了set getpublic class ViewWrapper {private View target;public ViewWrapper(View target) {this.target = target;}public int getWidth() {return target.getLayoutParams().width;} public void setWidth(int width) {target.getLayoutParams().width = width;target.requestLayout();}}//使用:ViewWrapper wrapper = new ViewWrapper(mButton);ObjectAnimator.ofInt(mButton,"width",500).setDuration(3000).start();二采用ValueAnimator,監聽動畫過程,自己實現屬性變化

ValueAnimator可以自己產生值,但要給其設定初始值,結束值,以及周期,就可以讓它開始運作

然后通過監聽,在其產生每一個值時人工改變對象的屬性值。

private void performAnimate(final View target, final int start, final int end) { ValueAnimator valueAnimator = ValueAnimator.ofInt(1, 100); valueAnimator.addUpdateListener(new AnimatorUpdateListener() { // 持有一個IntEvaluator對象,方便下面估值的時候使用 private IntEvaluator mEvaluator = new IntEvaluator(); @Override public void onAnimationUpdate(ValueAnimator animator) { // 獲得當前動畫的進度值,整型,1-100之間 int currentValue = (Integer) animator.getAnimatedValue(); Log.d(TAG, "current value: " + currentValue); // 獲得當前進度占整個動畫過程的比例,浮點型,0-1之間 float fraction = animator.getAnimatedFraction(); // 直接調用整型估值器通過比例計算出寬度,然后再設給Button target.getLayoutParams().width = mEvaluator.evaluate(fraction, start, end); target.requestLayout(); } }); valueAnimator.setDuration(5000).start(); }三。最簡單的還是給該對象該屬性增加set和get方法,如果可以的話

參考:Android開放藝術探索

Android中的View動畫


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙江县| 黔西县| 石城县| 鹿泉市| 十堰市| 济阳县| 阳新县| 盘山县| 许昌县| 宜兴市| 祁东县| 普陀区| 湄潭县| 隆子县| 周至县| 金昌市| 类乌齐县| 宜都市| 嘉义县| 都匀市| 莒南县| 额尔古纳市| 盐亭县| 温州市| 腾冲县| 闵行区| 江源县| 石台县| 泰顺县| 抚顺市| 蒙山县| 嵊州市| 闵行区| 石嘴山市| 西和县| 祁阳县| 科技| 宾川县| 贵港市| 石门县| 湖北省|