先上個(gè)動(dòng)畫小圖
Q:Android 中動(dòng)畫有幾類?
A:目前有三種:分別是補(bǔ)間動(dòng)畫、幀動(dòng)畫和屬性動(dòng)畫岁经。
tween補(bǔ)間動(dòng)畫
通過(guò)指定View的初末狀態(tài)和變化時(shí)間、方式蛇券,對(duì)View的內(nèi)容完成一系列的圖形變換來(lái)實(shí)現(xiàn)動(dòng)畫效果缀壤。
補(bǔ)間動(dòng)畫在細(xì)分可以分為漸變動(dòng)畫與轉(zhuǎn)換動(dòng)畫
漸變動(dòng)畫 | 轉(zhuǎn)換動(dòng)畫 |
---|---|
alpha(AlphaAnimation) | translate(TranslateAnimation) |
scale(ScaleAnimation) | rotate(RotetaAnimation) |
對(duì)于xml中各個(gè)效果的屬性設(shè)定就不在詳細(xì)描述,放在下面屬性動(dòng)畫會(huì)提到
最后通過(guò)View.startAnimation()來(lái)為子類添加動(dòng)畫效果
frame幀動(dòng)畫
AnimationDrawable 控制 animation-list xml布局
xml中內(nèi)容展示
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
<item android:drawable="@drawable/a_01" android:duration="50"/>
<item android:drawable="@drawable/a_02" android:duration="50"/>
<item android:drawable="@drawable/a_03" android:duration="50"/>
<item android:drawable="@drawable/a_04" android:duration="50"/>
<item android:drawable="@drawable/a_05" android:duration="50"/>
</animation-list>
Java中的代碼
imageview.setBackground(R.anim.anim);
AnimationDrawable anims = (AnimationDrawable)imageview.getBackground()
anims.start();
屬性動(dòng)畫(Propety Animation)
Duration動(dòng)畫持續(xù)時(shí)間纠亚,默認(rèn)300ms
Time interpolation 插補(bǔ)器塘慕,定義動(dòng)畫的變化率
Repeat count and behavior 重復(fù)次數(shù)、以及重復(fù)模式
Animator set 動(dòng)畫集合蒂胞,你可以定義一組動(dòng)畫图呢,一起執(zhí)行或者順序執(zhí)行
Frame refresh delay 幀刷新延遲,對(duì)于你的動(dòng)畫,多久刷新一次幀蛤织,默認(rèn)為10ms
相關(guān)類
ObejctAnimator 動(dòng)畫的執(zhí)行類
ValueAnimator 動(dòng)畫的執(zhí)行類
AnimatorSet 用于控制一組動(dòng)畫的執(zhí)行
TypeEvaluator 類型估值拥娄,主要用于設(shè)置動(dòng)畫操作屬性的值
TimeInterpolator 插補(bǔ)器
ObjectAnimator
ObjectAnimator.ofFloat(this,"rotationX",0.0f,360.0f).setDuration(500).start();
- 提供了ofInt、ofFloat瞳筏、ofObject,這幾個(gè)方法都是設(shè)置動(dòng)畫作用的元素稚瘾、作用的屬性、動(dòng)畫開始姚炕、結(jié)束中間的任意個(gè)屬性值摊欠。
ValueAnimator
ValueAnimator.ofFloat(0,100).setTarget(this).setDuration(1000).start();
監(jiān)聽動(dòng)畫的事件
- AnimatorUpdateListener
- AnimatorListener
- AnimatorListenerAdapter
AnimatorSet
ObjectAnimator anim1 = ObjectAnimator.ofFloat(this,"scaleX",1.0f,2f);
Objectanimator anim2 = ObjectAnimator.ofFloat(this,"scaleY",1.0f,2f);
AnimatorSet animSet = new AnimatorSet();
animSet.setDuration(1000);
animSet.setInterpolator(new LinearInterpolator());
animSet.playTogether(anim1,anim2);
animSet.start();
xml創(chuàng)建屬性動(dòng)畫
<ObjectAnimator xmlns:android="http://schema.android.com/apk/res/android"
android:duration="1000"
android:propertyName="scaleX"
android:valueFrom="1.0"
android:valueTo="2.0"
android:valueType="floatType"
/>
AnimatorInflater.loadAnimator(this,R.animator.scalex)
.setTarget(mMv)
.start();
overridePendingTransition activity轉(zhuǎn)場(chǎng)動(dòng)畫效果
Material Design中的Transaction動(dòng)畫
Ripple Effect
MD中在用戶觸摸屏幕時(shí)提供反饋,有助于視覺(jué)交流柱宦,形成互動(dòng)些椒。可以通過(guò)如下代碼設(shè)置波紋的背景:
android:background="?android:attr/selectableItemBackground" //默認(rèn)選項(xiàng)掸刊,在視圖范圍內(nèi)展示波紋效果
android:backgournd="?android:attr/selecableItemBackgroundBorderless" //可選項(xiàng)免糕,將波紋延伸到視圖之外
android:background="@drawable/customRipple" //自定義背景的ripple effect
customRipple.xml
<ripple xmlns:android="http:schemas.android.com/apk/res/androdi"
android:color="#c9352a"
>
<item>
<shape android:shape="rectangle">
<solid android:color="#02cce7"/>
<corners android:radius="4dp"/>
</shape>
</item>
</ripple>
這里通過(guò)幾個(gè)button的點(diǎn)擊效果可以直觀的感受下ripples
Circular Reveal
簡(jiǎn)單翻譯來(lái)說(shuō)稱之為圓形展現(xiàn)
ViewAnimationUtil.createCircularReveal(View view,int centerX,int centerY,float startRadius,float endRadius).start()
- centerX –點(diǎn)擊視圖的 X軸中心;
- centerY -點(diǎn)擊視圖的 Y軸中心忧侧;
- view –要顯示的視圖石窑;
- startRadius 動(dòng)畫開始半徑
- startRadius 動(dòng)畫結(jié)束半徑
Transitions
Interpolators
- enter 決定活動(dòng)視圖如何進(jìn)入場(chǎng)景
- exit 決定活動(dòng)視圖如何退出場(chǎng)景
- reenter 決定活動(dòng)試圖退出后如何再度進(jìn)入場(chǎng)景
- shared elements 決定活動(dòng)間如何共享視圖轉(zhuǎn)換
VectorDrawable
- Height & Width –矢量圖像的實(shí)際大小蚓炬;
- Viewport Height & Width –聲明描述矢量路徑的虛擬畫布的大兴裳贰;
- Group name –聲明路徑所屬的組名肯夏;
- Pivot X & Y –聲明群組規(guī)模和旋轉(zhuǎn)所使用的中心點(diǎn)经宏;
- Path Fill Color –描述矢量路徑的填充色;
- Path Data –聲明用于繪制矢量的矢量路徑數(shù)據(jù)驯击。