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

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

動畫二-屬性動畫

2019-11-09 17:04:39
字體:
來源:轉載
供稿:網友

一時間插值器(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動畫


上一篇:IO

下一篇:極光推送

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大连市| 新晃| 郸城县| 关岭| 长泰县| 镇巴县| 内黄县| 望谟县| 白沙| 安溪县| 潞西市| 漯河市| 禹城市| 鄂尔多斯市| 抚松县| 绵阳市| 溧水县| 赞皇县| 浮梁县| 洛宁县| 济南市| 明光市| 兴安盟| 民丰县| 巴东县| 沙河市| 开阳县| 准格尔旗| 五华县| 安新县| 沅陵县| 焉耆| 大厂| 焦作市| 肥城市| 尚志市| 洛川县| 永安市| 宜君县| 乐业县| 双桥区|