日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Android 属性动画(Property Animation) ValueAnimator 的介绍

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 属性动画(Property Animation) ValueAnimator 的介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先說下屬性動畫與視圖動畫的區別:

視圖動畫系統僅提供為 View?對象添加動畫效果的功能,因此,如果您想為非 對象添加動畫效果,則必須實現自己的代碼才能做到。視圖動畫系統也存在一些限制,因為它僅公開 對象的部分方面來供您添加動畫效果;例如,您可以對視圖的縮放和旋轉添加動畫效果,但無法對背景顏色這樣做。

視圖動畫系統的另一個缺點是它只會在繪制視圖的位置進行修改,而不會修改實際的視圖本身。例如,如果您為某個按鈕添加了動畫效果,使其可以在屏幕上移動,該按鈕會正確繪制,但能夠點擊按鈕的實際位置并不會更改,因此您必須通過實現自己的邏輯來處理此事件。

為了更好的里面這句話我也寫了一個demo 就是動畫移動前點擊圖片有Toast 提示,圖片移動之后點擊圖片沒有Toast 提示,點擊移動之后的空白界面卻有Toast 提示,也就是view動畫給圖片設置點擊事件移動之后點擊事件不起作用了,如下圖效果

錄制的問題鼠標沒有錄制出來下面gif 后面圖片不顯示是點擊了移動之后的圖片,后面又顯示了是點擊上面的空白

?

有了屬性動畫系統,您就可以完

全擺脫這些束縛,還可以為任何對象(視圖和非視圖)的任何屬性添加動畫效果,并且實際修改的是對象本身。屬性動畫系統在執行動畫方面也更為強健。概括地講,您可以為要添加動畫效果的屬性(例如顏色、位置或大小)分配 Animator,還可以定義動畫的各個方面,例如多個 Animator 的插值和同步。

不過,視圖動畫系統的設置需要的時間較短,需要編寫的代碼也較少。如果視圖動畫可以完成您需要執行的所有操作,或者現有代碼已按照您需要的方式運行,則無需使用屬性動畫系統。在某些用例中,也可以針對不同的情況同時使用這兩種動畫系統。

屬性動畫的工作原理就不說了,詳情的大家可以看官網?Android Developers 地址

動畫的API 地址如果有忘記的屬性可以點擊查看

ValueAnimator 的介紹:

The main timing engine for property animation that also computes the values for the property to be animated. It has all of the core functionality that calculates animation values and contains the timing details of each animation, information about whether an animation repeats, listeners that receive update events, and the ability to set custom types to evaluate. There are two pieces to animating properties: calculating the animated values and setting those values on the object and property that is being animated.?ValueAnimator?does not carry out the second piece, so you must listen for updates to values calculated by the?ValueAnimator?and modify the objects that you want to animate with your own logic. See the section about?Animating with ValueAnimator?for more information.

大致是說:

動畫效果分為兩個步驟:1 計算添加動畫效果之后的值,以及對要添加動畫效果的對象和屬性設置這些值 2?自己的邏輯修改要添加動畫效果的對象實現動畫,

大致就是 動畫的值改變了之后需要自己手動賦值對象的屬性來實現動畫

ValueAnimator? 里面有3個方法ofInt()?,ofFloat(),ofObject(),

下面說下這2個方法的使用

1 ofInt 實現的動畫如下圖

?1 java 代碼實現方法:

  // 設置屬性數值的初始值和結束值ValueAnimator valueAnimator = ValueAnimator.ofInt(0,400, 500, 600, 900, 600, 500, 400, 0);// 動畫時間這里是毫秒valueAnimator.setDuration(3000);// 延遲0.5 毫秒valueAnimator.setStartDelay(500);// 設置動畫次數-1 為重復播放其他次數為n+1次 例如0是1次 1是2次一次類推valueAnimator.setRepeatCount(-1);// 動畫的下次執行開始位置,RESTART表示動畫每次從原始的狀態執行,// REVERSE表示動畫第二次執行要從第一次改變后的狀態逆向執行valueAnimator.setRepeatMode(ValueAnimator.RESTART);// 設置數值變化監聽器,valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {// 獲取當前變化的值int currentValue = (Integer) valueAnimator.getAnimatedValue();imageView.setTranslationY(currentValue);}});// 開始動畫valueAnimator.start();

2 xml 代碼實現方法:

  // 加載xml文件ValueAnimator animator =(ValueAnimator) AnimatorInflater.loadAnimator(MainActivity.this,R.animator.value_int_animator);animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {// 獲取當前變化的值int currentValue = (Integer) animation.getAnimatedValue();imageView.setTranslationX(currentValue);}});// 開始animator.start();

創建 1個animator的文件夾 然后value_int_animator.xml 的文件 里面的內容如下

<?xml version="1.0" encoding="utf-8"?>
<animator xmlns:android="http://schemas.android.com/apk/res/android"android:valueFrom="0"android:valueTo="300"android:valueType="intType"android:duration="3000"android:repeatCount="10"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:repeatMode="restart"></animator>

2 ofObject 動畫實現的效果如下

1 java 代碼實現

 ValueAnimator valueAnimator = ValueAnimator.ofFloat(1.0f,500f, 800f, 500f, 1.0f);// 動畫時間這里是毫秒valueAnimator.setDuration(3000);// 延遲0.5 毫秒valueAnimator.setStartDelay(500);// 設置動畫次數-1 為重復播放其他次數為n+1次 例如0是1次 1是2次一次類推valueAnimator.setRepeatCount(-1);// 動畫的下次執行開始位置,RESTART表示動畫每次從原始的狀態執行,// REVERSE表示動畫第二次執行要從第一次改變后的狀態逆向執行valueAnimator.setRepeatMode(ValueAnimator.RESTART);// 設置數值變化監聽器,valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {// 獲取當前變化的值Float currentValue = (Float) valueAnimator.getAnimatedValue();int curValue = currentValue.intValue();imageView.setTranslationY(curValue);}});// 開始動畫valueAnimator.start();

2 xml 方法實現

  // 加載xml文件ValueAnimator animator =(ValueAnimator) AnimatorInflater.loadAnimator(MainActivity.this,R.animator.value_float_animator);animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {// 獲取當前變化的值Float currentValue = (Float) animation.getAnimatedValue();int curValue = currentValue.intValue();imageView.setTranslationX(curValue);}});// 開始animator.start();

創建 1個animator的文件夾 然后value_float_animator.xml 的文件 里面的內容如下

<?xml version="1.0" encoding="utf-8"?>
<animator xmlns:android="http://schemas.android.com/apk/res/android"android:duration="3000"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:repeatCount="-1"android:repeatMode="restart"android:valueFrom="0"android:valueTo="300"android:valueType="floatType"></animator>

3 ofObject

在說這個之前先說下:ValueAnimator包含?TimeInterpolator?和?TypeEvaluator;前者用于定義動畫插值,后者用于定義如何計算正在添加動畫效果的屬性的值

這里就先不多說了,后期會詳細的介紹,先知道他們的作用即可

實現的動畫如下

代碼試下如下

 ValueAnimator valueAnimator = ValueAnimator.ofObject(new TypeEvaluator() {@Overridepublic Object evaluate(float fraction, Object startValue, Object endValue) {PointF point = new PointF();point.x = fraction * 500;point.y = 55 * (fraction * 3) * (fraction * 3) * fraction;return point;}}, new PointF(0, 0));// 動畫時間這里是毫秒valueAnimator.setDuration(3000);// 延遲0.5 毫秒valueAnimator.setStartDelay(500);// 設置動畫次數-1 為重復播放其他次數為n+1次 例如0是1次 1是2次一次類推valueAnimator.setRepeatCount(-1);// 動畫的下次執行開始位置,RESTART表示動畫每次從原始的狀態執行,// REVERSE表示動畫第二次執行要從第一次改變后的狀態逆向執行valueAnimator.setRepeatMode(ValueAnimator.RESTART);// 設置數值變化監聽器,valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {PointF pointF = (PointF) valueAnimator.getAnimatedValue();imageView.setX(pointF.x);imageView.setY(pointF.y);}});// 開始動畫valueAnimator.start();

這里先簡單的說下估值器? TypeEvaluator 如果自定義的需要實現??TypeEvaluator 然后在evaluate 里面寫要實現的內容

上面基本就說完了ValueAnimator 動畫了,代碼都有詳細的注意?

最后看到方法里面有一個 ofArgb,改變顏色值的方法,自己也寫了一個demo 感覺使用ofInt 也是可以的

ofArgb 實現的動畫

實現的代碼如下:

  ValueAnimator valueAnimator = ValueAnimator.ofArgb(0xFF5C96FF, 0xFFFBC02D,0xFF4FFB2D, 0xFFC2185B, 0xFF00796B);// 動畫時間這里是毫秒valueAnimator.setDuration(3000);// 延遲0.5 毫秒valueAnimator.setStartDelay(500);// 設置動畫次數-1 為重復播放其他次數為n+1次 例如0是1次 1是2次一次類推valueAnimator.setRepeatCount(-1);// 動畫的下次執行開始位置,RESTART表示動畫每次從原始的狀態執行,// REVERSE表示動畫第二次執行要從第一次改變后的狀態逆向執行valueAnimator.setRepeatMode(ValueAnimator.RESTART);// 設置數值變化監聽器,valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {// 獲取當前變化的值int currentValue = (Integer) valueAnimator.getAnimatedValue();textView.setBackgroundColor(currentValue);}});// 開始動畫valueAnimator.start();

?

?

總結

以上是生活随笔為你收集整理的Android 属性动画(Property Animation) ValueAnimator 的介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。