Android中的动画有哪几类?各自的特点和区别是什么?
生活随笔
收集整理的這篇文章主要介紹了
Android中的动画有哪几类?各自的特点和区别是什么?
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在 android.view.animation包中有四種基本的動(dòng)畫(huà) ,透明/伸縮/移動(dòng)/旋轉(zhuǎn)。 動(dòng)畫(huà)類(lèi)型
Android的animation由四種類(lèi)型組成
XML中
| alpha | 漸變透明度動(dòng)畫(huà)效果 |
| scale | 漸變尺寸伸縮動(dòng)畫(huà)效果 |
| translate | 畫(huà)面轉(zhuǎn)換位置移動(dòng)動(dòng)畫(huà)效果 |
| rotate | 畫(huà)面轉(zhuǎn)移旋轉(zhuǎn)動(dòng)畫(huà)效果 |
| AlphaAnimation | 漸變透明度動(dòng)畫(huà)效果 |
| ScaleAnimation | 漸變尺寸伸縮動(dòng)畫(huà)效果 |
| TranslateAnimation | 畫(huà)面轉(zhuǎn)換位置移動(dòng)動(dòng)畫(huà)效果 |
| RotateAnimation | 畫(huà)面轉(zhuǎn)移旋轉(zhuǎn)動(dòng)畫(huà)效果 |
Animation主要有兩種動(dòng)畫(huà)模式:
一種是tweened animation(漸變動(dòng)畫(huà))
| XML中 | JavaCode |
| alpha | AlphaAnimation |
| scale | ScaleAnimation |
| XML中 | JavaCode |
| translate | TranslateAnimation |
| rotate | RotateAnimation |
Frame動(dòng)畫(huà),傳統(tǒng)的動(dòng)畫(huà)方法,通過(guò)順序的播放排列好的圖片來(lái)實(shí)現(xiàn),類(lèi)似電影。 在項(xiàng)目過(guò)程中,在xml中設(shè)置了播放的圖片和間隔如下: <?xml version="1.0" encoding="utf-8"?>
<animation-list
? ? ? ? xmlns:android="http://schemas.android.com/apk/res/android"
? ? ? ? android:oneshot="false">
? ? <item android:drawable="@drawable/wait_1" android:duration="80" />
? ? <item android:drawable="@drawable/wait_2" android:duration="80" />
? ? <item android:drawable="@drawable/wait_3" android:duration="80" />
? ? <item android:drawable="@drawable/wait_4" android:duration="80" />
? ? <item android:drawable="@drawable/wait_5" android:duration="80" />
? ? <item android:drawable="@drawable/wait_6" android:duration="80" />
? ? <item android:drawable="@drawable/wait_7" android:duration="80" />
? ? <item android:drawable="@drawable/wait_8" android:duration="80" />
? ? <item android:drawable="@drawable/wait_9" android:duration="80" />
? ? <item android:drawable="@drawable/wait_10" android:duration="80" />
? ? <item android:drawable="@drawable/wait_11" android:duration="80" />
? ? <item android:drawable="@drawable/wait_12" android:duration="80" />
</animation-list>
類(lèi)似于一個(gè)等待的過(guò)程,不斷地加載圖片,達(dá)到動(dòng)畫(huà)的效果。
Android 中的動(dòng)畫(huà)有幀動(dòng)畫(huà),補(bǔ)間動(dòng)畫(huà),屬性動(dòng)畫(huà),她們的忑點(diǎn)和使用方法如下:
###幀動(dòng)畫(huà)> 一張張圖片不斷的切換,形成動(dòng)畫(huà)效果
* 在drawable目錄下定義xml文件,子節(jié)點(diǎn)為animation-list,在這里定義要顯示的圖片和每張圖片的顯示時(shí)長(zhǎng)? ??
? ?? ???<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
? ?? ?? ?? ?<item android:drawable="@drawable/g1" android:duration="200" />
? ?? ?? ?? ?<item android:drawable="@drawable/g2" android:duration="200" />
? ?? ?? ?? ?<item android:drawable="@drawable/g3" android:duration="200" />
? ?? ???</animation-list>
* 在屏幕上播放幀動(dòng)畫(huà)
? ?? ???ImageView iv = (ImageView) findViewById(R.id.iv);
? ?? ???//把動(dòng)畫(huà)文件設(shè)置為imageView的背景
? ?? ???iv.setBackgroundResource(R.drawable.animations);
? ?? ???AnimationDrawable ad = (AnimationDrawable) iv.getBackground();
? ?? ???//播放動(dòng)畫(huà)? ?? ???
? ?? ???ad.start();
###補(bǔ)間動(dòng)畫(huà)
* 原形態(tài)變成新形態(tài)時(shí)為了過(guò)渡變形過(guò)程,生成的動(dòng)畫(huà)就叫補(bǔ)間動(dòng)畫(huà)
* 位移、旋轉(zhuǎn)、縮放、透明
#####位移:
* 參數(shù)10指的是X的起點(diǎn)坐標(biāo),但不是指屏幕x坐標(biāo)為10的位置,而是imageview的 真實(shí)X + 10
* 參數(shù)150指的是X的終點(diǎn)坐標(biāo),它的值是imageview的 真實(shí)X + 150? ??
? ?? ???//創(chuàng)建為位移動(dòng)畫(huà)對(duì)象,設(shè)置動(dòng)畫(huà)的初始位置和結(jié)束位置
? ?? ???TranslateAnimation ta = new TranslateAnimation(10, 150, 20, 140);
* x坐標(biāo)的起點(diǎn)位置,如果相對(duì)于自己,傳0.5f,那么起點(diǎn)坐標(biāo)就是 真實(shí)X + 0.5 * iv寬度
* x坐標(biāo)的終點(diǎn)位置,如果傳入2,那么終點(diǎn)坐標(biāo)就是 真實(shí)X + 2 * iv的寬度
* y坐標(biāo)的起點(diǎn)位置,如果傳入0.5f,那么起點(diǎn)坐標(biāo)就是 真實(shí)Y + 0.5 * iv高度
* y坐標(biāo)的終點(diǎn)位置,如果傳入2,那么終點(diǎn)坐標(biāo)就是 真實(shí)Y + 2 * iv高度
? ?? ???TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 2);
* 動(dòng)畫(huà)播放相關(guān)的設(shè)置
? ?? ???//設(shè)置動(dòng)畫(huà)持續(xù)時(shí)間
? ?? ???ta.setDuration(2000);
? ?? ???//動(dòng)畫(huà)重復(fù)播放的次數(shù)
? ?? ???ta.setRepeatCount(1);
? ?? ???//動(dòng)畫(huà)重復(fù)播放的模式
? ?? ???ta.setRepeatMode(Animation.REVERSE);
? ?? ???//動(dòng)畫(huà)播放完畢后,組件停留在動(dòng)畫(huà)結(jié)束的位置上
? ?? ???ta.setFillAfter(true);
? ?? ???//播放動(dòng)畫(huà)
? ?? ???iv.startAnimation(ta);
#####縮放:
* 參數(shù)0.1f表示動(dòng)畫(huà)的起始寬度是真實(shí)寬度的0.1倍
* 參數(shù)4表示動(dòng)畫(huà)的結(jié)束寬度是真實(shí)寬度的4倍
* 縮放的中心點(diǎn)在iv左上角
? ?? ???ScaleAnimation sa = new ScaleAnimation(0.1f, 4, 0.1f, 4);
* 參數(shù)0.1f和4意義與上面相同
* 改變縮放的中心點(diǎn):傳入的兩個(gè)0.5f,類(lèi)型都是相對(duì)于自己,這兩個(gè)參數(shù)改變了縮放的中心點(diǎn)
* 中心點(diǎn)x坐標(biāo) = 真實(shí)X + 0.5 * iv寬度
* 中心點(diǎn)Y坐標(biāo) = 真實(shí)Y + 0.5 * iv高度
? ? ScaleAnimation sa = new ScaleAnimation(0.1f, 4, 0.1f, 4, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
#####透明:
* 0為完全透明,1為完全不透明
? ?? ???AlphaAnimation aa = new AlphaAnimation(0, 0.5f);
#####旋轉(zhuǎn):
* 20表示動(dòng)畫(huà)開(kāi)始時(shí)的iv的角度
* 360表示動(dòng)畫(huà)結(jié)束時(shí)iv的角度
* 默認(rèn)旋轉(zhuǎn)的圓心在iv左上角
? ?? ???RotateAnimation ra = new RotateAnimation(20, 360);
* 20,360的意義和上面一樣
* 指定圓心坐標(biāo),相對(duì)于自己,值傳入0.5,那么圓心的x坐標(biāo):真實(shí)X + iv寬度 * 0.5
* 圓心的Y坐標(biāo):真實(shí)Y + iv高度 * 0.5
? ?? ???RotateAnimation ra = new RotateAnimation(20, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
---
#屬性動(dòng)畫(huà)
* 補(bǔ)間動(dòng)畫(huà),只是一個(gè)動(dòng)畫(huà)效果,組件其實(shí)還在原來(lái)的位置上,xy沒(méi)有改變
###位移:
* 第一個(gè)參數(shù)target指定要顯示動(dòng)畫(huà)的組件
* 第二個(gè)參數(shù)propertyName指定要改變組件的哪個(gè)屬性
* 第三個(gè)參數(shù)values是可變參數(shù),就是賦予屬性的新的值
* 傳入0,代表x起始坐標(biāo):當(dāng)前x + 0
* 傳入100,代表x終點(diǎn)坐標(biāo):當(dāng)前x + 100
? ?? ???//具有g(shù)et、set方法的成員變量就稱(chēng)為屬性
? ?? ???ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "translationX", 0, 100) ;
###縮放:
* 第三個(gè)參數(shù)指定縮放的比例
* 0.1是從原本高度的十分之一開(kāi)始
* 2是到原本高度的2倍結(jié)束
? ?? ???ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "scaleY", 0.1f, 2);
###透明:
* 透明度,0是完全透明,1是完全不透明
? ?? ???
? ?? ???ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "alpha", 0.1f, 1);
###旋轉(zhuǎn)
* rotation指定是順時(shí)針旋轉(zhuǎn)
* 20是起始角度
* 270是結(jié)束角度
? ?? ???ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "rotation", 20, 270);
* 屬性指定為rotationX是豎直翻轉(zhuǎn)
* 屬性指定為rotationY是水平翻轉(zhuǎn)
? ?? ???ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "rotationY", 20, 180);
###可變參數(shù)
* 第三個(gè)參數(shù)可變參數(shù)可以傳入多個(gè)參數(shù),可以實(shí)現(xiàn)往回位移(旋轉(zhuǎn)、縮放、透明)
? ?? ???ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "translationX", 0, 70, 30, 100) ; 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的Android中的动画有哪几类?各自的特点和区别是什么?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BDS和GPS、电离层相关SSR数据解码
- 下一篇: C语言 数据结构 树和二叉树