視圖動畫(View Animation)
視圖動畫中有兩個類型:
1、漸變動畫(Tween animation)
2筑凫、幀動畫(Frame animation)
1、漸變動畫(Tween animation)實現(xiàn)
通過創(chuàng)建一個動畫來對一個圖像或視圖執(zhí)行一系列的轉換。如旋轉,漸變五鲫,移動和拉伸。
先來看看一些xml屬性的解釋:
<set>
包裹其他動畫元素(<alpha>, <scale>, <translate>, <rotate>)或其他<set>元素岔擂,java代碼中為AnimationSet。
attributes | description |
---|---|
android:interpolator: | 插值器 |
android:shareInterpolator | boolean值浪耘,為true的時候將同一個插值器共享到每個子元素中 |
<alpha>
一個淡入淡出的動畫乱灵,java代碼中是AlphaAnimation。
attributes | description |
---|---|
android:fromAlpha | float型七冲,起點的透明度痛倚,從0.0-1.0 |
android:toAlpha | float型,終點的透明度澜躺,從0.0-1.0 |
<scale>
一個縮放動畫蝉稳,java代碼中是ScaleAnimation。
attributes | description |
---|---|
android:fromXScale | float掘鄙,動畫開始時基于原圖像X軸方向的比例耘戚,1.0是沒有變化,0就是無 |
android:toXScale | float操漠,動畫結束時基于原圖像X軸方向的比例收津,1.0是沒有變化,0就是無 |
android:fromYScale | float浊伙,動畫開始時基于原圖像Y軸方向的比例撞秋,1.0是沒有變化,0就是無 |
android:toYScale | float嚣鄙,動畫結束時基于原圖像Y軸方向的比例吻贿,1.0是沒有變化,0就是無 |
android:pivotX | 動畫的起點X軸位置哑子,有三種類型舅列,基于像素大小肌割,基于自身大小,基于父容器大小剧蹂。(基于控件左上角為原點声功,50、50%宠叼、50%p-分別指的是坐標50px先巴,視圖X軸方向長度的一半,父布局的一半) |
android:pivotY | 動畫的起點Y軸位置冒冬,與pivotX類型一致伸蚯,換成Y軸方向 |
<translate>
一個位移動畫,java代碼中是TranslateAnimation简烤。
attributes | description |
---|---|
android:fromXDelta | 動畫X軸開始的起點剂邮,有三種類型,基于像素大小横侦,基于自身大小挥萌,基于父容器大小。(基于控件左上角為原點枉侧,50、50%榨馁、50%p-分別指的是坐標50px憨栽,視圖X軸方向長度的一半,父布局的一半) |
android:toXDelta | 動畫X軸結束的起點翼虫,類型與上訴一致 |
android:fromYDelta | 動畫Y軸開始的起點 |
android:toYDelta | 動畫Y軸結束的起點 |
<rotate>
一個旋轉動畫屑柔,java代碼中是RotateAnimation。計算旋轉量珍剑,toDegrees -fromDegrees的角度就是旋轉量(負數(shù)是逆時針掸宛,正數(shù)是順時針)。0度是手機的豎直方向次慢。
attributes | description |
---|---|
android:fromDegrees | float旁涤,開始旋轉的角度(負數(shù)是逆時針,正數(shù)是順時針) |
android:toDegrees | float迫像,結束旋轉的角度劈愚,同上 |
android:pivotX | 旋轉的點的X軸坐標(基于控件左上角為原點,50闻妓、50%菌羽、50%p-分別指的是坐標50px,視圖X軸方向長度的一半由缆,父布局的一半) |
android:pivotY | 旋轉的點的Y軸坐標 |
以上的xml在對應的對象中都有相應的getter和setter方法來獲取屬性和設置屬性注祖。
xml實現(xiàn)
大概了解了上面的屬性后猾蒂,我們要開始來點實戰(zhàn)來實現(xiàn)這些個屬性。
xml配置文件:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:duration="5000">
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0" />
<scale
android:fromXScale="0"
android:fromYScale="0"
android:toXScale="1.0"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%" />
<translate
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="500"
android:toYDelta="500" />
<!-- 0度是豎直狀態(tài) -->
<rotate
android:fromDegrees="0"
android:toDegrees="270"
android:pivotX="50%"
android:pivotY="50%"/>
</set>
java代碼:
AnimationSet animSet = (AnimationSet) AnimationUtils.loadAnimation(context, R.anim.anim_set);
moveBtn.startAnimation(animSet);
只需要通過以上步驟我們就能夠實現(xiàn)壓縮動畫了是晨。在這里解釋下對于setAnimation()和startAnimation()的區(qū)別肚菠,如下圖:設置下一條要播放的動畫,若是需要立即播放動畫罩缴,使用startAnimation()蚊逢。而setAnimation()這種方法提供了允許細粒度的控制開始時間和無效,但是必須確保1)動畫有一組開始時間,和2)視圖的父(控制動畫在兒童)將動畫應該開始時失效。該方法的是需要一定的條件才能觸發(fā)的箫章。
java代碼實現(xiàn):
我先放幾張圖烙荷,讓大家了解相關的類:
其實這幾種動畫的構造函數(shù)都是需要在實例化對象的將值傳遞進去的。而后在實例化對象后檬寂,直接讓視圖調用startAnimation()即可终抽。
translate animation
rotate animation
scale animation
alpha animation
animation-set
2、幀動畫(Frame animation)實現(xiàn)
將圖片像電影一樣按順序播放桶至。
<animation-list>
該標簽必須是根標簽昼伴,包裹<item>
attributes | description |
---|---|
android:oneshot | boolean,是否只播放一次镣屹,false-否亩码,true-只播放一次 |
<item>
一個動畫的單幀,必須是<animation-list>的子元素
attributes | description |
---|---|
android:drawable | int野瘦,圖片資源 |
android:duration | Integer,動畫播放時間 |
xml實現(xiàn)
幀動畫的文件放在/res/drawable中飒泻。
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item
android:drawable="@drawable/dog"
android:duration="500" />
<item
android:drawable="@drawable/cat_dog"
android:duration="500" />
</animation-list>
java代碼:
Drawable drawable = context.getDrawable(R.drawable.list_anim);
imageView.setBackground(drawable);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
animationDrawable.start();
java代碼實現(xiàn)
AnimationDrawable animDrawable = new AnimationDrawable();
animDrawable.addFrame(getDrawable(R.drawable.cat_dog), 200);
animDrawable.addFrame(getDrawable(R.drawable.dog), 200);
imageView.setBackground(animDrawable);
animDrawable.start();
animation-list
Animation-list
以上就是視圖動畫的學習總結鞭光,總結出來可能有遺漏或者錯誤,歡迎指正~
個人總結泞遗。轉載請注明出處~http://www.reibang.com/p/78f5987d01b6