亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android屬性動畫賞析

難度中級
時長 1小時20分
學習人數
綜合評分9.80
125人評價 查看評價
9.9 內容實用
9.8 簡潔易懂
9.7 邏輯清晰
  • 總結——常用屬性 我們通過 ObjectAnimator 可以調用各種屬性,只要這個屬性具有get/set方法,我們就可以操縱它,如果這個屬性沒有提供get/set方法,或者我們想自定義一個屬性,來讓它進行一些改變,那么我們就要定義一個Property(屬性),去實現它的set/get方法,就可以操作這樣一個屬性。 ObjectAnimator常用的一些操作屬性: 1. translationX\translationY 2. rotation、rotationX\rotationY,這里的rotation是指3D的旋轉。rotationX是水平方向的旋轉,rotationY是垂直方向的旋轉。 3. scaleX\scaleY 水平、垂直方向的縮放。 4. X\Y 具體會移動到的某個點。 5. alpha 透明度 屬性動畫框架執行的效率更高、效果更好。 總結——常用方法、類 1. ValueAnimator 數值發生器,可以實現很多很靈活的動畫效果 2. ObjectAnimator 是ValueAnimator的一個子類,它封裝了ValueAnimator,讓我們更輕松地使用屬性動畫框架。我們通過ObjectAnimator來操作一個對象的屬性,讓對象產生一個動畫效果。 3. AnimatorUpdateListener 監聽事件 4. AnimatorListenerAdapter 監聽事件 5. PropertyValuesHolder 控制動畫集合的顯示效果、順序和流程控制 6. AnimatorSet 控制動畫集合的顯示效果、順序和流程控制 7. TypeEvaluators 值計算器 8. Interpolators 插值器 值計算器和插值器用來控制具體產生的數值的一個變化規律以及變化狀態。 總結——Interpolater圖示(如圖) 表格代表了所有值的變化范圍,曲線代表產生的數值是如何變化的。這也就是插值器的概念。
    查看全部
  • 除了ValueAnimator.ofInt(),還有其他類型的數字生成器,其中ValueAnimator.ofObject()可以實現自定義的數字生成器。 參數中的fraction就是時間因子(0到1之間變化的數值)。通過fraction、startValue、endValue,通過各種各樣的計算方式,就可以生成所有想要產生的值,不光能產生普通數據結構,通過泛型還可以定義更為復雜的數據結構。 ValueAnimator animator = ValueAnimator.ofObject(new TypeEvaluator() { @Override public Object evaluate(float fraction, Object startValue, Object endValue) { return null; } }); 生成泛型PointF(float類型的點坐標): ValueAnimator animator = ValueAnimator.ofObject(new TypeEvaluator<PointF>() { @Override public PointF evaluate(float fraction, PointF startValue, PointF endValue) { return null; } }); 在方法evaluate()中可以添加各種各樣的計算方式。 ---------- 第二重境界學無止境,ValueAnimator不僅僅可以應用于動畫,也可以應用于Android的其他領域。
    查看全部
  • 1. 之前學過ObjectAnimator是作用于某一控件的某一屬性,而ValueAnimator本身不作用于任何屬性,本身也不會提供任何動畫,簡單而言,ValueAnimator是一個數值發生器,可以產生任何你想要的數值,Android系統給它提供了很多數值計算方法。 2. 那么,產生這些數值有什么用呢?其實,在屬性動畫中,如何產生每一步的具體動畫效果,都是通過 ValueAnimator 計算出來的。比如要實現一個0到100的位移動畫,隨著時間的持續,數值也從0到100遞增,有這些值,就可以作用這些屬性,讓它產生動畫效果。 3. 那么,ValueAnimator 是如何產生這些值的呢? 首先,ValueAnimator 會根據動畫已經進行的時間和總時間的比值,產生一個0到1的時間因子,有了這樣的時間因子,經過相應的變換,就可以根據你的StartValue和EndValue,來生成中間的相應的值。同時,通過插值器的使用,我們還可以進一步控制每一個時間因子的產生值的變化速度,比如我們使用線性插值器,生成數值的時候就是一個線性變化,只要時間相同,增量就相同。 由于 ValueAnimator 本身不響應任何一個動畫,也不能控制任何一個屬性,所以它并沒有 ObjectAnimator 使用得那么廣泛。 4. 查看源碼,我們可以發現 ObjectAnimator 是繼承了 ValueAnimator。之前也說過了,正是由于 ValueAnimator 產生的動畫變化的變化值,ObjectAnimator 才可以將它應用于我們的屬性。因此,ObjectAnimator 實際上是對ValueAnimator的封裝。 5. 那么,如何通過 ValueAnimator 去實現動畫效果呢?這就需要使用動畫監聽事件了,我們可以監聽ValueAnimator每一步所產生的值,通過這個值去實現相應的動畫效果。 案例:使用ValueAnimator實現計數器: 如圖所示的例子中,先使用ValueAnimator.ofInt(0,100)獲取0到100之間的所有數字,并設置一個時間為5秒,然后,通過監聽器(調用addUpdateListener())的監聽事件,獲取 ValueAnimator每一步變化所產生的值,通過這些值去設置Button的顯示文字。至此,就實現了一個簡單的計數器。
    查看全部
  • 以下摘自評論區: (float) (Math.sin(Math.toRadians((i - 1) * 90 / (6 - 1))) * 200) 其中,6是要展開的圖標數,200是半徑。 按照上面程序加入translationX,和translationY中可以以扇形展開。 ------------ 案例中這個程序有一個bug,就是當動畫還未完全展開的時候,此時再點擊紅色按鈕,程序會響應回收圖片的事件,由于圖片還未完全展開,導致出現動畫展開和回收一起出現的混亂場面。 ------------- 解決動畫期間按鈕可以點擊的bug:在for循環外面增加ObjectAnimator的addListener的onAnimationEnd方法,在startAnim開始時設置按鈕不可點擊:mImageViews.get(0).setEnabled(false),在onAnimationEnd方法中恢復按鈕點擊事件:mImageViews.get(0).setEnabled(true),endAnim()同理。 --------------- 設置兩個flag,第一個是記錄菜單打開關閉的flag1,第二個是記錄菜單是否處于動畫中的flag2; 第二個記錄處于動畫中的flag2在進入for循環前改變狀態成true; 第一個flag1 狀態改變放在最后一個objectanimator的監聽事件onAnimationEnd里,第二個flag2狀態也在這里重新切換成false(因為到這里動畫已經結束了) 放出菜單的判斷是if(flag1&&!flag2) 放出收回菜單的判斷是else if(!flag&&!flag2) 這樣在動畫中就不會再次觸發動畫了。
    查看全部
  • 如圖是實現菜單彈出和回收的代碼 其余代碼: 全局變量: private int[] res={R.id.imageView_a,R.id.imageView_b,R.id.imageView_c,R.id.imageView_d, R.id.imageView_e,R.id.imageView_f,R.id.imageView_g,R.id.imageView_h,}; private List<ImageView> imageViewList = new ArrayList<ImageView>(); private boolean flag = true; 在 onCreate() 中進行ImageView初始化和點擊事件的綁定: for (int i=0;i<res.length;i++){ ImageView imageView = (ImageView)findViewById(res[i]); imageView.setOnClickListener(this); imageViewList.add(imageView); } 在點擊事件doClick()中對第一個圖進行判斷: switch (v.getId()){ case R.id.imageView_a: if(flag){ stratAnim(); }else { closeAnim(); } break; default: Toast.makeText(this, "點擊了"+v.getId(), Toast.LENGTH_SHORT).show(); break } 這里列舉了幾種插值器(以下都只是前綴,例如Accelerate表示AccelerateInterpolator): Accelerate 加速變化 Decelerate 減速變化 AccelerateDecelerate 先加速再減速 Overshoot 在結束之前會超出預定位置一點點,然后回到預定位置 Bounce 最常見的回彈動畫,例如自由落體的小球的回彈效果就是通過這樣一個插值器實現的。
    查看全部
  • Animator 的 set 方法為我們提供了非常豐富的動畫控制效果。例如:playTogether()同時播放,playSequentially()按順序播放。 set還可以做更詳細的順序控制,如圖 set.play(animator2).with(animator3); // 動畫animator2和animator3同時進行 set.play(animator1).after(animator2); // 動畫animator1在animator2(也可以寫3)之后進行 這種方式也是屬性動畫框架中使用最多的一種:通過 ObjectAnimator 進行更精確的屬性動畫設置,只控制一個對象的一個屬性,同時多個 ObjectAnimator 組合到 AnimatorSet 中,形成一個完整的動畫效果。而且 AnimatorSet 可以通過調用 play()、with()、after()、before()、playTogether()、playSequentially()等方法,實現更為豐富的動畫效果。
    查看全部
  • 在圖中已經被注釋掉的部分是使用 ObjectAnimator 的ofFloat()方法為 ImageView對象添加動畫效果。 但這里更推薦使用圖中的 PropertyValuesHolder 方式。因為谷歌在PropertyValuesHolder 中做了一些優化。 PropertyValuesHolder 的優點:更加有效率,更加節省系統資源。 ------------- 摘自評論區: ofFloat的常見參數:String[] values = {"translationX","translationY","scaleX","scaleY","rotation","alpha"}; translationX: 偏移位置(單位:像素) scalexX: 縮放程度(0.5F代表縮放50%) rotation: 旋轉角度(單位:角度) alpha: 透明度(0.5F代碼50%不透明)
    查看全部
  • 屬性動畫 Animator 與傳統動畫 Animation Animation:系統一直不斷地調用 onDraw()方法去重繪界面,來實現動畫的效果。 Animator:屬性動畫,顧名思義,就是通過屬性的 get/set 方法去真實地改變這個屬性。 既然已經有了 Animation 動畫框架,谷歌為什么還要創建 Animator 屬性動畫框架呢? 局限性:交互性較差,比較耗費CPU資源等。舉個例子: 給一個ImageView設置點擊事件(比如彈出一個Toast),并給ImageView設置位移動畫(動畫已設置了setFillAfter(true),使圖片在位移之后不會復位),最后設置一個Button用于啟動動畫。啟動動畫之前,我們點擊圖片,會彈出一個Toast,這很正常。但啟動動畫之后,等圖片離開了原來的位置,我們再點擊這個圖片,卻毫無響應,去點擊原來的位置,卻彈出了Toast,這就是Animation的第一個局限:它只是重繪了動畫,并不具有交互性,不能做有交互的動畫效果。 第二個局限:由于Animation動畫框架是通過不斷去調用 onDraw()去重繪界面,所以會很耗費CPU資源。 其他局限:Animation僅僅具有位移、旋轉、縮放、透明度這4種動畫。雖然通過各種各樣的組合,我們已經能夠實現比較豐富的動畫效果,但是相比一個屬性來說,這還是遠遠不夠的。 -------------- 另外新手推薦學習 Google API Demos,這里匯集了很多Android經典的小例子。
    查看全部
  • 插值器總結
    查看全部
  • 屬性動畫總結
    查看全部
  • 屬性動畫常用屬性
    查看全部
  • 006
    查看全部
  • ValueAnimator --數值發生器,可以實現很多很靈活的動畫效果; ObjectAnimator --繼承于ValueAnimator,可以很好滴使用屬性對話框架; AnimatorUpdateListener -- 用于動畫監聽器 AnimatorListenerAdapter-- 用于動畫監聽器 PropertyValuesHolder --用于控制動畫集合的顯示效果 Animatorset --用于控制動畫集合的顯示效果 TypeEvaluators ---值計算器,用于控制值變化的規律 Interprolators ---插值計算器,用于控制值變化的規律
    查看全部
  • 005
    查看全部
  • 004
    查看全部

舉報

0/150
提交
取消
老師告訴你能學到什么?
通過本課程,你將學到: 1、3.0之后新增的屬性動畫介紹 2、舊動畫框架的局限性 3、實際演示屬性動畫的基本用法 4、介紹關于動畫的高級技巧:插值器、估值器等 5、各種動畫的使用場景

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!