日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > 綜合技術(shù) > Android Animation學(xué)習(xí)筆記

Android Animation學(xué)習(xí)筆記

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-03-23 08:07:33 閱讀次數(shù):4103次

關(guān)于動(dòng)畫(huà)的實(shí)現(xiàn),Android提供了Animation,在Android SDK介紹了2種Animation模式:

1. Tween Animation:通過(guò)對(duì)場(chǎng)景里的對(duì)象不斷做圖象變換(平移、縮放、旋轉(zhuǎn))產(chǎn)生動(dòng)畫(huà)效果,即是1種漸變動(dòng)畫(huà);

2. Frame Animation:順序播放事前做好的圖象,是1種畫(huà)面轉(zhuǎn)換動(dòng)畫(huà)。

動(dòng)畫(huà)類型

下面先來(lái)看看Android提供的動(dòng)畫(huà)類型。Android的animation由4種類型組成

在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à)效果

在Java 源碼中定義了相應(yīng)的類,可使用這些類的方法來(lái)獲得和操作相應(yīng)的屬性:

  • 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à)效果

image

Tween Animation

1個(gè)tween動(dòng)畫(huà)將對(duì)視圖對(duì)象中的內(nèi)容進(jìn)行1系列簡(jiǎn)單的轉(zhuǎn)換(位置,大小,旋轉(zhuǎn),透明性)。如果你有1個(gè)文本視圖對(duì)象,你可以移動(dòng)它,旋轉(zhuǎn)它,讓它變大或讓它變小,如果文字下面還有背景圖象,背景圖象也會(huì)隨著文件進(jìn)行轉(zhuǎn)換。

使用XML來(lái)定義Tween Animation

動(dòng)畫(huà)的XML文件在工程中res/anim目錄,這個(gè)文件必須包括1個(gè)根元素,可使<alpha><scale> <translate> <rotate>插值元素或是把上面的元素都放入<set>元素組中,默許情況下,所以的動(dòng)畫(huà)指令都是同時(shí)產(chǎn)生的,為了讓他們按序列產(chǎn)生,需要設(shè)置1個(gè)特殊的屬性startOffset。動(dòng)畫(huà)的指令定義了你想要產(chǎn)生甚么樣的轉(zhuǎn)換,當(dāng)他們產(chǎn)生了,應(yīng)當(dāng)履行多長(zhǎng)時(shí)間,轉(zhuǎn)換可以是連續(xù)的也能夠使同時(shí)的。例如,你讓文本內(nèi)容從左側(cè)移動(dòng)到右側(cè),然后旋轉(zhuǎn)180度,或在移動(dòng)的進(jìn)程中同時(shí)旋轉(zhuǎn),沒(méi)個(gè)轉(zhuǎn)換需要設(shè)置1些特殊的參數(shù)(開(kāi)始和結(jié)束的大小尺寸的大小變化,開(kāi)始和結(jié)束的旋轉(zhuǎn)角度等等,也能夠設(shè)置些基本的參數(shù)(例如,開(kāi)始時(shí)間與周期),如果讓幾個(gè)轉(zhuǎn)換同時(shí)產(chǎn)生,可以給它們?cè)O(shè)置相同的開(kāi)始時(shí)間,如果按序列的話,計(jì)算開(kāi)始時(shí)間加上其周期。

Tween Animation共同的節(jié)點(diǎn)屬性

屬性[類型] 功能 備注
Duration[long] 屬性為動(dòng)畫(huà)延續(xù)時(shí)間 時(shí)間以毫秒為單位
fillAfter [boolean] 當(dāng)設(shè)置為true ,該動(dòng)畫(huà)轉(zhuǎn)化在動(dòng)畫(huà)結(jié)束后被利用
fillBefore[boolean] 當(dāng)設(shè)置為true ,該動(dòng)畫(huà)轉(zhuǎn)化在動(dòng)畫(huà)開(kāi)始前被利用

interpolator

指定1個(gè)動(dòng)畫(huà)的插入器 有1些常見(jiàn)的插入器
accelerate_decelerate_interpolator
加速-減速 動(dòng)畫(huà)插入器
accelerate_interpolator
加速-動(dòng)畫(huà)插入器
decelerate_interpolator
減速- 動(dòng)畫(huà)插入器
其他的屬于特定的動(dòng)畫(huà)效果
repeatCount[int] 動(dòng)畫(huà)的重復(fù)次數(shù)  
RepeatMode[int] 定義重復(fù)的行動(dòng) 1:重新開(kāi)始  2:plays backward
startOffset[long] 動(dòng)畫(huà)之間的時(shí)間間隔,從上次動(dòng)畫(huà)停多少時(shí)間開(kāi)始履行下個(gè)動(dòng)畫(huà)
zAdjustment[int] 定義動(dòng)畫(huà)的Z Order的改變 0:保持Z Order不變
1:保持在最上層
⑴:保持在最下層

表2

XML節(jié)點(diǎn) 功能說(shuō)明
alpha 漸變透明度動(dòng)畫(huà)效果
<alpha
android:fromAlpha=”0.1″
android:toAlpha=”1.0″
android:duration=”3000″ />
fromAlpha

屬性為動(dòng)畫(huà)起始時(shí)透明度

0.0表示完全透明
1.0表示完全不透明
以上值取0.0⑴.0之間的float數(shù)據(jù)類型的數(shù)字

duration為動(dòng)畫(huà)延續(xù)時(shí)間,ms單位

toAlpha

屬性為動(dòng)畫(huà)結(jié)束時(shí)透明度

表3

scale 漸變尺寸伸縮動(dòng)畫(huà)效果
<scale
android:interpolator= “@android:anim/accelerate_decelerate_interpolator”
android:fromXScale=”0.0″
android:toXScale=”1.4″
android:fromYScale=”0.0″
android:toYScale=”1.4″
android:pivotX=”50%”
android:pivotY=”50%”
android:fillAfter=”false”
android:startOffset=“700”
android:duration=”700″
android:repeatCount=”10″ />
fromXScale[float] fromYScale[float] 為動(dòng)畫(huà)起始時(shí),X、Y坐標(biāo)上的伸縮尺寸 0.0表示收縮到?jīng)]有
1.0表示正常無(wú)伸縮
值小于1.0表示收縮
值大于1.0表示放大
toXScale [float]
toYScale[float]
為動(dòng)畫(huà)結(jié)束時(shí),X、Y坐標(biāo)上的伸縮尺寸
pivotX[float]
pivotY[float]
為動(dòng)畫(huà)相對(duì)物件的X、Y坐標(biāo)的開(kāi)始位置 屬性值說(shuō)明:從0%⑴00%中取值,50%為物件的X或Y方向坐標(biāo)上的中點(diǎn)位置
       

表4

translate 畫(huà)面轉(zhuǎn)換位置移動(dòng)動(dòng)畫(huà)效果
<translate
android:fromXDelta=”30″
android:toXDelta=”⑻0″
android:fromYDelta=”30″
android:toYDelta=”300″
android:duration=”2000″ />
fromXDelta
toXDelta
為動(dòng)畫(huà)、結(jié)束起始時(shí) X坐標(biāo)上的位置  
fromYDelta
toYDelta
為動(dòng)畫(huà)、結(jié)束起始時(shí) Y坐標(biāo)上的位置  
       

表5

rotate 畫(huà)面轉(zhuǎn)移旋轉(zhuǎn)動(dòng)畫(huà)效果
<rotate
android:interpolator=”@android:anim/accelerate_decelerate_interpolator”
android:fromDegrees=”0″
android:toDegrees=”+350″
android:pivotX=”50%”
android:pivotY=”50%”
android:duration=”3000″ />
fromDegrees 為動(dòng)畫(huà)起始時(shí)物件的角度 說(shuō)明
當(dāng)角度為負(fù)數(shù)――表示逆時(shí)針旋轉(zhuǎn)
當(dāng)角度為正數(shù)――表示順時(shí)針旋轉(zhuǎn)
(負(fù)數(shù)from――to正數(shù):順時(shí)針旋轉(zhuǎn))
(負(fù)數(shù)from――to負(fù)數(shù):逆時(shí)針旋轉(zhuǎn))
(正數(shù)from――to正數(shù):順時(shí)針旋轉(zhuǎn))
(正數(shù)from――to負(fù)數(shù):逆時(shí)針旋轉(zhuǎn))
toDegrees 屬性為動(dòng)畫(huà)結(jié)束時(shí)物件旋轉(zhuǎn)的角度 可以大于360度
pivotX
pivotY
為動(dòng)畫(huà)相對(duì)物件的X、Y坐標(biāo)的開(kāi)始位 說(shuō)明:以上兩個(gè)屬性值 從0%⑴00%中取值
50%為物件的X或Y方向坐標(biāo)上的中點(diǎn)位置

下面給出1個(gè)完全的XML定義(SDK提供)

<set android:shareInterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="1.0" android:toXScale="1.4" android:fromYScale="1.0" android:toYScale="0.6" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="700" /> <set android:interpolator="@android:anim/decelerate_interpolator"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" android:fillBefore="false" /> <rotate android:fromDegrees="0" android:toDegrees="⑷5" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" /> </set> </set>

Tween Animation如何使用

使用AnimationUtils類的靜態(tài)方法loadAnimation()來(lái)加載XML中的動(dòng)畫(huà)XML文件

//main.xml中的ImageView ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage); //加載動(dòng)畫(huà) Animation hyperspaceJumpAnimation =AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); //使用ImageView顯示動(dòng)畫(huà) spaceshipImage.startAnimation(hyperspaceJumpAnimation);

如何在Java代碼中定義動(dòng)畫(huà)

//在代碼中定義 動(dòng)畫(huà)實(shí)例對(duì)象 private Animation myAnimation_Alpha; private Animation myAnimation_Scale; private Animation myAnimation_Translate; private Animation myAnimation_Rotate; //根據(jù)各自的構(gòu)造方法來(lái)初始化1個(gè)實(shí)例對(duì)象 myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f); myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); myAnimation_Translate=new TranslateAnimation(30.0f, ⑻0.0f, 30.0f, 300.0f); myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);

interpolator的解釋

interpolator定義1個(gè)動(dòng)畫(huà)的變化率(the rate of change)。這使得基本的動(dòng)畫(huà)效果(alpha, scale, translate, rotate)得以加速,減速,重復(fù)等。

Interpolator 定義了動(dòng)畫(huà)的變化速度,可以實(shí)現(xiàn)勻速、正加速、負(fù)加速、無(wú)規(guī)則變加速等。Interpolator 是基類,封裝了所有 Interpolator 的共同方法,它只有1個(gè)方法,即 getInterpolation (float input),該方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation。Android 提供了幾個(gè) Interpolator 子類,實(shí)現(xiàn)了不同的速度曲線,以下:

AccelerateDecelerateInterpolator 在動(dòng)畫(huà)開(kāi)始與介紹的地方速率改變比較慢,在中間的時(shí)候加速
AccelerateInterpolator 在動(dòng)畫(huà)開(kāi)始的地方速率改變比較慢,然后開(kāi)始加速
CycleInterpolator 動(dòng)畫(huà)循環(huán)播放特定的次數(shù),速率改變沿著正弦曲線
DecelerateInterpolator 在動(dòng)畫(huà)開(kāi)始的地方速率改變比較慢,然后開(kāi)始減速
LinearInterpolator 在動(dòng)畫(huà)的以均勻的速率改變

 

Frame Animation

Frame Animation是順序播放事前做好的圖象,跟電影類似。不同于animation package, Android SDK提供了另外1個(gè)類AnimationDrawable來(lái)定義、使用Frame Animation。

Frame Animation可以在XML Resource定義(還是寄存到resanim文件夾下),也能夠使用AnimationDrawable中的API定義。由于Tween Animation與Frame Animation有著很大的不同,因此XML定義的格式也完全不1樣,其格式是:首先是animation-list根節(jié)點(diǎn),animation-list根節(jié)點(diǎn)中包括多個(gè)item子節(jié)點(diǎn),每一個(gè)item節(jié)點(diǎn)定義1幀動(dòng)畫(huà),當(dāng)前幀的drawable資源和當(dāng)前幀延續(xù)的時(shí)間。下面對(duì)節(jié)點(diǎn)的元素加以說(shuō)明: 

XML屬性 說(shuō)明
drawable 當(dāng)前幀援用的drawable資源
duration 當(dāng)前幀顯示的時(shí)間(毫秒為單位)
oneshot 如果為true,表示動(dòng)畫(huà)只播放1次停止在最后1幀上,如果設(shè)置為false表示動(dòng)畫(huà)循環(huán)播放。
variablePadding If true, allows the drawable’s padding to change based on the current state that is selected.
visible 規(guī)定drawable的初始可見(jiàn)性,默許為flase;

下面就給個(gè)具體的XML例子,來(lái)定義1幀1幀的動(dòng)畫(huà):

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"     android:oneshot="true">     <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />     <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />     <item android:drawable="@drawable/rocket_thrust3" android:duration="200" /> </animation-list>

上面的XML就定義了1個(gè)Frame Animation,其包括3幀動(dòng)畫(huà),3幀動(dòng)畫(huà)中分別利用了drawable中的3張圖片:rocket_thrust1,rocket_thrust2,rocket_thrust3,每幀動(dòng)畫(huà)延續(xù)200毫秒。

然后我們將以上XML保存在res/anim/文件夾下,命名為rocket_thrust.xml,顯示動(dòng)畫(huà)的代碼:

AnimationDrawable rocketAnimation; public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.main);   ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);   rocketImage.setBackgroundResource(R.anim.rocket_thrust);   rocketAnimation = (AnimationDrawable) rocketImage.getBackground(); } public boolean onTouchEvent(MotionEvent event) {   if (event.getAction() == MotionEvent.ACTION_DOWN) {     rocketAnimation.start();     return true;   }   return super.onTouchEvent(event); }

代碼運(yùn)行的結(jié)果:3張圖片依照順序的播放1次.

有1點(diǎn)需要強(qiáng)調(diào)的是:?jiǎn)?dòng)Frame Animation動(dòng)畫(huà)的代碼rocketAnimation.start();不能在OnCreate()中,由于在OnCreate()中AnimationDrawable還沒(méi)有完全的與ImageView綁定,在OnCreate()中啟動(dòng)動(dòng)畫(huà),就只能看到第1張圖片。這里實(shí)在拖曳事件中實(shí)現(xiàn)的。

下面,瀏覽Android SDK中對(duì)AnimationDrawable的介紹,有個(gè)簡(jiǎn)單的了解:

AnimationDrawable

獲得、設(shè)置動(dòng)畫(huà)的屬性  
int getDuration() 獲得動(dòng)畫(huà)的時(shí)長(zhǎng)
int getNumberOfFrames() 獲得動(dòng)畫(huà)的幀數(shù)
boolean isOneShot()

 

Void setOneShot(boolean oneshot)

獲得oneshot屬性
設(shè)置oneshot屬性
void inflate(Resurce r,XmlPullParser p,
AttributeSet attrs)
 
增加、獲得幀動(dòng)畫(huà)
Drawable getFrame(int index) 獲得某幀的Drawable資源
void addFrame(Drawable frame,int duration) 為當(dāng)前動(dòng)畫(huà)增加幀(資源,延續(xù)時(shí)長(zhǎng))
動(dòng)畫(huà)控制
void start() 開(kāi)始動(dòng)畫(huà)
void run() 外界不能直接掉調(diào)用,使用start()替換
boolean  isRunning() 當(dāng)前動(dòng)畫(huà)是不是在運(yùn)行
void stop() 停止當(dāng)前動(dòng)畫(huà)

 

本文參考:Android SDK

               moandroid.com

                eoeandroid.com

161
分類: Android
綠色通道: 好文要頂 關(guān)注我 收藏該文與我聯(lián)系 
feisky
關(guān)注 - 10
粉絲 - 673
+加關(guān)注
14
0
(請(qǐng)您對(duì)文章做出評(píng)價(jià))
? 上1篇:分享如何求matlab程序的運(yùn)行時(shí)間
? 下1篇:Android網(wǎng)絡(luò)連接處理學(xué)習(xí)筆記

Feedback

#1樓   

2010⑴1⑴0 16:06 by 傳說(shuō)中的祥哥  
想請(qǐng)教1下樓主,如果是1個(gè)實(shí)例加載多個(gè)動(dòng)畫(huà),用代碼方式怎樣實(shí)現(xiàn)?
例如:
用xml實(shí)現(xiàn)漸變加上畫(huà)面位置轉(zhuǎn)換可以用以下:
<?xml version="1.0" encoding="utf⑻"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
>
<alpha
and
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久精品国产免费 | 国产中文一区 | 欧美日韩综合视频 | www久久综合 | 国产一二三区在线 | 99精品免费观看 | 成人午夜视频网站 | 国产高清久久 | 亚洲第1页 | 精品久久久久一区二区国产 | 欧美成人一区二区三区 | 国产成人精品在线 | 欧美一区二区三区国产 | 国产在线精品一区 | 国精产品一区二区 | 一区二区免费在线视频 | 欧美porn| 免费看黄a| 成人免费在线 | 亚洲国产一区在线观看 | 天堂中文资源在线 | 成视频年人免费看黄网站 | 久久99深爱久久99精品 | 国产一区二区三区欧美 | 亚洲免费看色 | 日韩三级在线观看 | 在线国产一区二区 | 国产精品99久久久久久动医院 | 日韩精品一区二区三区免费观看 | 日韩精品影院 | 亚洲aav| 一区精品视频 | 久久国产成人精品av | 999成人免费视频 | 欧美首页 | 久久中文字幕一区 | 黄色片网站免费看 | 成人97精品毛片免费看 | 国产精品日韩一区二区 | 欧美一区二区在线视频 | 国产精品久久久久久久久久久新郎 |