Tween Animation程式碼實現效果
阿新 • • 發佈:2018-12-20
1,補間動畫(Tween Animation)
-
a. 補間動畫(支援四種類型:平移(Translate)、旋轉(Rotate)、縮放(Scale)、不透明度(Alpha)。
-
b. 只是顯示的位置變動,View的實際位置未改變,表現為View移動到其他地方,點選事件仍在原處才能響應。(這個是重點,比如你設了控制元件點選事件,動畫結束後,你點你看到的控制元件位置,是不會響應的,點原來的位置可以響應,這就是補間動畫只是顯示位置變動,實際位置沒有改變)
-
c. 組合使用步驟較複雜。
-
d. View Animation 也是指此補間動畫。
2,程式碼實現補間動畫:
【1】透明動畫(AlphaAnimation)
//[1]建立一個透明動畫 1.0代表完全不透明 0.0完全透明 AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f); //[2]設定動畫執行的時長 aa.setDuration(2000); //[3]設定動畫執行重複次數 aa.setRepeatCount(1); //[4]設定重複的模式 aa.setRepeatMode(Animation.REVERSE); //[3]iv執行動畫 iv.startAnimation(aa);
【2】旋轉動畫(RotateAnimation)
// 建立旋轉動畫 // RotateAnimation ra = new RotateAnimation(0, 360); // 0.5f代表當前控制元件寬*0.5 // Animation.RELATIVE_TO_SELF 相對於自身 RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // [2]設定動畫執行的時長 ra.setDuration(2000); // [3]設定動畫執行重複次數 ra.setRepeatCount(1); // [4]設定重複的模式 ra.setRepeatMode(Animation.REVERSE); // [3]iv執行動畫 iv.startAnimation(ra);
【3】縮放動畫(ScaleAnimation)
// 縮放(放大 縮小)1.0預設 3.0f是大三倍。
ScaleAnimation sa = new ScaleAnimation(1.0f, 3.0f, 1.0f, 3.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
// [2]設定動畫執行的時長
sa.setDuration(2000);
// [3]設定動畫執行重複次數
sa.setRepeatCount(1);
// [4]設定重複的模式
sa.setRepeatMode(Animation.REVERSE);
// [3]iv執行動畫
iv.startAnimation(sa);
【4】位移動畫(TranslateAnimation)
// 建立一個位移動畫 最後一個引數 慎用整數
//RELATIVE_TO_PARENT 相對於父佈局
TranslateAnimation ta = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,
0, Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, 0.2f);
// [2]設定動畫執行的時長
ta.setDuration(2000);
// 當動畫執行完畢後 停留在結束位置
ta.setFillAfter(true);
// [3]iv執行動畫
iv.startAnimation(ta);
【5】動畫集合(AnimationSet) --- 使用 set.addAnimation(aa)新增開啟動畫
// [1]建立動畫的合集
AnimationSet set = new AnimationSet(true);
// [1]建立一個透明動畫 1.0代表完全不透明 0.0完全透明
AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f);
// [2]設定動畫執行的時長
aa.setDuration(2000);
// [3]設定動畫執行重複次數
aa.setRepeatCount(1);
// [4]設定重複的模式
aa.setRepeatMode(Animation.REVERSE);
RotateAnimation ra = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
// [2]設定動畫執行的時長
ra.setDuration(2000);
// [3]設定動畫執行重複次數
ra.setRepeatCount(1);
// [4]設定重複的模式
ra.setRepeatMode(Animation.REVERSE);
ScaleAnimation sa = new ScaleAnimation(1.0f, 3.0f, 1.0f, 3.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
// [2]設定動畫執行的時長
sa.setDuration(2000);
// [3]設定動畫執行重複次數
sa.setRepeatCount(1);
// [4]設定重複的模式
sa.setRepeatMode(Animation.REVERSE);
TranslateAnimation ta = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,
0, Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, 0.2f);
// [2]設定動畫執行的時長
ta.setDuration(2000);
// 當動畫執行完畢後 停留在結束位置
ta.setFillAfter(true);
// 往動畫合集裡面新增動畫
set.addAnimation(aa);
set.addAnimation(ra);
set.addAnimation(sa);
set.addAnimation(ta);
//執行動畫
iv.startAnimation(set);