android屬性動畫
一、發展
Android 3.0以前,只有補間動畫和逐幀動畫,合稱檢視動畫
Android 3.0後新增了"屬性動畫"
補間動畫和逐幀動畫缺點:
- 作用物件侷限於View
- 沒有改變View的屬性,只是改變了視覺效果
- 動畫效果單一,只能平移,縮放,旋轉,和改變透明度
屬性動畫改進了上面的缺點:
能作用於所有Java物件,可實現多種動畫效果,不侷限於以上四種
引入了作用領域,
二、工作原理
三、使用
ValueAnimator
ValueAnimator animator=ValueAnimator.ofInt(0,100);
animator.setDuration(1000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Log.d("jay","value="+animation.getAnimatedValue());
}
});
animator.start();
過程為呼叫ValueAnimator的ofInt()方法就可以建立一個ValueAnimator物件,ofInt方法傳入的引數代表將值從0平滑過度到100,setDuration()方法是設定動畫執行時長,addUpdateListener()方法可以監聽動畫執行過程,start()方法啟動動畫
ObjectAnimator
TextView textView=findViewById(R.id.tv);
Button btn=findViewById(R.id.btn);
final ObjectAnimator animator=ObjectAnimator.ofFloat(textView,"alpha",1f,0f,1f);
animator.setDuration(10000);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
animator.start();
}
});
實現了點選按鈕textView消失又重現的動畫
ofFloat的引數分別為View物件、動畫效果,開始狀態,中間狀態,結束狀態
第二個引數可以是alpha(改變透明度)、rotation(旋轉)、translationX(水平移動)、scaleY(垂直縮放),還有其他的各種值
原理是通過屬性名找到View的set、get方法進行操作,比如View中存在
public void setAlpha(float value);
public float getAlpha();
則可以改變alpha。
所以我們可以設定任何值,只要在View中建立這個屬性的set和get方法
組合動畫
實現組合動畫功能主要需要藉助AnimatorSet這個類,這個類提供了一個play()方法,如果我們向這個方法中傳入一個Animator物件(ValueAnimator或ObjectAnimator)將會返回一個AnimatorSet.Builder的例項,AnimatorSet.Builder中包括以下四個方法:
- after(Animator anim) 將現有動畫插入到傳入的動畫之後執行
- after(long delay) 將現有動畫延遲指定毫秒後執行
- before(Animator anim) 將現有動畫插入到傳入的動畫之前執行
- with(Animator anim) 將現有動畫和傳入的動畫同時執行
ObjectAnimator moveIn = ObjectAnimator.ofFloat(textview, "translationX", -500f, 0f);
ObjectAnimator rotate = ObjectAnimator.ofFloat(textview, "rotation", 0f, 360f);
ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);
AnimatorSet animSet = new AnimatorSet();
animSet.play(rotate).with(fadeInOut).after(moveIn);
animSet.setDuration(5000);
animSet.start();
Animator監聽器
anim.addListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
});
我們需要實現介面中的四個方法,onAnimationStart()方法會在動畫開始的時候呼叫,onAnimationRepeat()方法會在動畫重複執行的時候呼叫,onAnimationEnd()方法會在動畫結束的時候呼叫,onAnimationCancel()方法會在動畫被取消的時候呼叫。
不監聽全部事件
使用介面卡AnimatorListenerAdapter類,已經幫我們自動實現了所有方法,我們只要重寫需要的方法即可
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
}
});
使用XML編寫動畫
單個動畫
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType"
android:propertyName="alpha"/>
組合動畫
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially" >
<objectAnimator
android:duration="2000"
android:propertyName="translationX"
android:valueFrom="-500"
android:valueTo="0"
android:valueType="floatType" >
</objectAnimator>
<set android:ordering="together" >
<objectAnimator
android:duration="3000"
android:propertyName="rotation"
android:valueFrom="0"
android:valueTo="360"
android:valueType="floatType" >
</objectAnimator>
<set android:ordering="sequentially" >
<objectAnimator
android:duration="1500"
android:propertyName="alpha"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType" >
</objectAnimator>
<objectAnimator
android:duration="1500"
android:propertyName="alpha"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" >
</objectAnimator>
</set>
</set>
</set>
啟動動畫
Animator animator = AnimatorInflater.loadAnimator(context, R.animator.anim_file);
animator.setTarget(view);
animator.start();
參考連結:
相關文章
- Android 動畫之屬性動畫Android動畫
- Android 屬性動畫實戰Android動畫
- 【Android 動畫】動畫詳解之屬性動畫(三)Android動畫
- 【Android 動畫】動畫詳解之屬性動畫(五)Android動畫
- Android 動畫詳解:屬性動畫、View 動畫和幀動畫Android動畫View
- Android 顏色漸變 屬性動畫Android動畫
- Android備忘錄《屬性動畫-ValueAnimator》Android動畫
- Android 自定義View:屬性動畫(六)AndroidView動畫
- 屬性動畫動畫
- SVG 動畫 fill 屬性SVG動畫
- SVG restart 動畫屬性SVGREST動畫
- SVG restart動畫屬性SVGREST動畫
- 初識屬性動畫——使用Animator建立動畫動畫
- 屬性動畫與差值器動畫
- HenCoder Android 自定義 View 1-6: 屬性動畫(上手篇)AndroidView動畫
- Android繪製(三):Path結合屬性動畫,讓圖示動起來!Android動畫
- SVG accumulate和additive動畫屬性SVG動畫
- Android屬性動畫基礎:你是否真的瞭解插值器(TimeInterpolator)Android動畫
- 屬性動畫-波紋擴散WaveView動畫View
- 三談屬性動畫——Keyframe以及ViewPropertyAnimator動畫View
- 檢視屬性+物件動畫元件ViewPropertyObjectAnimator物件動畫元件ViewObject
- Android XML 屬性AndroidXML
- Android 《CardView 屬性》AndroidView
- 屬性動畫 ValueAnimator 執行原理全解析動畫
- 帶有活力的屬性動畫原始碼分析與實戰——Android高階UI動畫原始碼AndroidUI
- CSS動畫屬性關鍵幀keyframes全解析CSS動畫
- APK瘦身屬性——android:extractNativeLibsAPKAndroid
- Android動畫Android動畫
- android 動畫Android動畫
- Android自動化-如何獲取檢視元素屬性?Android
- 安卓Property Animator動畫詳解(二)-自定義屬性安卓動畫
- 多條目載入(附帶透明的屬性動畫)動畫
- Android 樣式屬性的使用Android
- Android 動畫初探Android動畫
- Android之動畫Android動畫
- Android | 玩轉AppBarLayout,設定scrollFlags滑動屬性詳解AndroidAPP
- 【Android 動畫】動畫詳解之補間動畫(一)Android動畫
- Android控制元件的fitSystemWindows屬性Android控制元件Windows