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

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 動畫效果(一)-漸變動畫

動畫效果(一)-漸變動畫

來源:程序員人生   發布時間:2016-07-21 09:23:29 閱讀次數:2984次

第1節 概述

在安卓系統中,為了界面或其中的組件在切換、改變的時候顯得自然生動、具有活動性的美感,就給它們添加了動畫的效果。

例如圖片切換的時候,前1張圖片淡出,后1張圖片淡入。

動畫分了3類: frame動畫(逐幀動畫)、 property動畫(屬性動畫)、 tween動畫(漸變動畫)。

  1. 逐幀動畫有點像播放電影,它把很多圖片串起來,依照順序1張1張顯示,通過播放構成動畫效果;

  2. 屬性動畫是對控件某個屬性使用的動畫,例如1個按鈕的寬度要從窄設置到寬,而我們希望它的寬度調劑的時候,能看到它從窄到寬變化的進程,這時候就需要使用屬性動畫。

  3. 漸變動畫是對控件整體使用的動畫,有4種最多見到的效果:透明、平移、縮放和旋轉。


/*******************************************************************/
* 版權聲明
* 本教程只在CSDN和安豆網發布,其他網站出現本教程均屬侵權。
/*******************************************************************/


第2節 漸變動畫

漸變動畫有4種最多見到的效果:透明、平移、縮放和旋轉。這4種效果都有共同點,

  1. 動畫對象作為整體1點點變化;
  2. 這是1個狀態的遷移進程,需要時間的配合,動畫的時間長短可以指定,動畫變化的速度也是可以指定的;
  3. 動畫履行后,這個動畫的對象,其實不是真實的變成了動畫展現的那樣,它其實還保持著之前的模樣,你看到的不過是個它的影子罷了,動畫結束,影子就消失了。

動畫效果可以通過資源文件定義,也能夠通過代碼來定義。

2.1 透明動畫

透明動畫的效果是,動畫對象的透明度從1個程度變成另外一個程度。例如從透明變成不透明這類淡入效果。

2.1.1 xml定義透明動畫

通過xml定義透明動畫,

  1. res下新建1個anim目錄,然后在這個目錄下創建1個xml文件
  2. 定義動畫效果,

    <?xml version="1.0" encoding="utf⑻"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="1500" android:interpolator="@android:anim/linear_interpolator"/> </set>

透明動畫的各個屬性代表了以下的含義:

  1. <alpha/>標簽:這是1個透明效果的動畫;
  2. fromAlpha:動畫開始時,動畫對象的透明度值,取值在0⑴之間,0是完全透明,1是完全不透明,01之間的值就是各種半透效果;
  3. toAlpha:動畫結束時,動畫對象的透明度值,取值在0⑴之間;
  4. duration:動畫延續的時間,單位是毫秒;
  5. interpolator:這是插值器,用來指定動畫變化的速率,例如是先快后慢,還是先慢后快,或是均勻的變化。安卓系統為我們提供了很多現成的插值器,我們可以直接使用,例如上面的線性插值器@android:anim/linear_interpolator

淡入效果就是剛開始沒有顯示,逐步顯示出來,所以它的fromAlpha就要設置成0toAlpha設置成1;

淡出效果就是剛開始顯示,逐步隱藏起來,所以它的fromAlpha就要設置成1toAlpha設置成0;

另外,Android SDK也提供了自定義插值器的方法,我們在以后介紹。

2.1.2 java代碼定義透明動畫

通過java代碼定義透明動畫,

  1. 創建1個AlphaAnimation,填入起始alpha值和結束的alpha值;
  2. 設定延續時間;
  3. 設定插值器;
AlphaAnimation anim = new AlphaAnimation(0, 1); anim.setDuration(1500); anim.setInterpolator(context, android.R.interpolator.linear);

2.2 平移動畫

平移動畫的效果是,動畫對象沿著水平方向或垂直方向移動(或兩個方向同時移動)到另外一位置。

2.2.1 xml定義平移動畫

通過xml定義透明動畫,

  1. res下新建1個anim目錄,然后在這個目錄下創建1個xml文件
  2. 定義動畫效果,

    <?xml version="1.0" encoding="utf⑻"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-100%" android:fromYDelta="-100%" android:toXDelta="0%" android:toYDelta="0%" android:duration="1500" android:interpolator="@android:anim/linear_interpolator"/> </set>

平移動畫的各個屬性代表了以下的含義:

  1. <translate/>標簽:這是1個平移效果的動畫;
  2. fromXDelta:動畫開始時,動畫對象相對它真實位置在x方向上的坐標;
  3. fromYDelta:動畫開始時,動畫對象相對它真實位置在y方向上的坐標;
  4. toXDelta:動畫結束時,動畫對象相對它真實位置在y方向上的坐標;
  5. toYDelta:動畫結束時,動畫對象相對它真實位置在y方向上的坐標;
  6. duration:動畫延續的時間,單位是毫秒;
  7. interpolator:這是插值器,用來指定動畫變化的速率;

起始坐標有3種表達方式:

  1. 動畫對象的絕對位置:用數值表示。
  2. 動畫對象相對本身的位置:用表示。例如給fromXDelta設定-100%,表示動畫開始時,起始的左側邊界相對本身真實位置,在負的本身寬度的地方;

  3. 動畫對象相對它父布局的位置:用%p表示,這里的p就是parent的縮寫。

讓對象從左往右平移進入的效果,就是讓它的fromXDelta設置成-100%toXDelta設置成0%fromYDelta設置成0%toYDelta設置成0%

讓對象從下往上平移進入的效果,就是讓它的fromXDelta設置成0%toXDelta設置成0%fromYDelta設置成100%(y坐標是從上到下為正方向);toYDelta設置成0%

2.2.2 java代碼定義平移動畫

通過java代碼定義平移動畫,

  1. 創建1個TranslateAnimation,填入x y方向的起始坐標和結束坐標;設置坐標時,可以設定坐標的類型,Animation.RELATIVE_TO_SELF表示使用相對本身的位置坐標,Animation.RELATIVE_TO_PARENT表示使用相對父布局的位置坐標,Animation.ABSOLUTE表示使用絕對位置坐標;
  2. 設定延續時間;
  3. 設定插值器;
//使用坐標的絕對位置創建動畫 TanslateAnimation anim = new TanslateAnimation(-150, 0, -50, 0); anim.setDuration(1500); anim.setInterpolator(context, android.R.interpolator.linear); //使用坐標的相對位置創建動畫 TanslateAnimation anim = new TanslateAnimation(Animation.RELATIVE_TO_SELF, -1.0, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, -1.0, Animation.RELATIVE_TO_SELF, 0); anim.setDuration(1500); anim.setInterpolator(context, android.R.interpolator.linear);

2.3 縮放動畫

伸縮動畫的效果是,動畫對象以某個位置為中心進行放大或縮小。

2.3.1 xml定義伸縮動畫

通過xml定義伸縮動畫,

  1. res下新建1個anim目錄,然后在這個目錄下創建1個xml文件
  2. 定義動畫效果,

    <?xml version="1.0" encoding="utf⑻"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale="-100%" android:fromYScale="-100%" android:toXScale="0%" android:toYScale="0%" android:pivotX="50%" android:pivotY="50%" android:duration="1500" android:interpolator="@android:anim/linear_interpolator"/> </set>

伸縮動畫的各個屬性代表了以下的含義:

  1. <scale/>標簽:這是1個伸縮效果的動畫;
  2. fromXScale:動畫開始時,動畫對象在x方向上相對它真實大小的縮放比例;
  3. fromYScale:動畫開始時,動畫對象在x方向上相對它真實大小的縮放比例;
  4. toXScale:動畫結束時,動畫對象在y方向上相對它真實大小的縮放比例;
  5. toYScale:動畫結束時,動畫對象在y方向上相對它真實大小的縮放比例;
  6. duration:動畫延續的時間,單位是毫秒;
  7. interpolator:這是插值器,用來指定動畫變化的速率;
  8. pivotX:動畫進行縮放時的中心點x坐標;
  9. pivotY:動畫進行縮放時的中心點y坐標;

這里的pivotXpivotY可以設置絕對坐標,也能夠設置相對本身的相對坐標,和相對父布局的相對坐標%p

2.3.2 java代碼定義伸縮動畫

通過java代碼定義伸縮動畫,

  1. 創建1個ScaleAnimation,填入x y方向的起始伸縮比例和結束伸縮比例;設置中心坐標時,可以設定坐標的類型,Animation.RELATIVE_TO_SELF表示使用相對本身的位置坐標,Animation.RELATIVE_TO_PARENT表示使用相對父布局的位置坐標,Animation.ABSOLUTE表示使用絕對位置坐標;
  2. 設定延續時間;
  3. 設定插值器;
//使用中心點的絕對位置創建動畫 ScaleAnimation anim = new ScaleAnimation(1, 2, 1, 2, 50, 150); anim.setDuration(1500); anim.setInterpolator(context, android.R.interpolator.linear); //使用中心點的相對位置創建動畫 ScaleAnimation anim = new ScaleAnimation(1, 2, 1, 2, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0.5); anim.setDuration(1500); anim.setInterpolator(context, android.R.interpolator.linear);

2.4 旋轉動畫

旋轉動畫的效果是,動畫對象以某個位置為中心進行旋轉。

2.4.1 xml定義旋轉動畫

通過xml定義旋轉動畫,

  1. res下新建1個anim目錄,然后在這個目錄下創建1個xml文件
  2. 定義動畫效果,

    <?xml version="1.0" encoding="utf⑻"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%" android:pivotY="50%" android:duration="1500" android:interpolator="@android:anim/linear_interpolator"/> </set>

伸縮動畫的各個屬性代表了以下的含義:

  1. <rotate/>標簽:這是1個旋轉效果的動畫;
  2. fromDegrees:動畫開始時,動畫對象相對真實位置旋轉的角度;
  3. toDegrees:動畫開始時,動畫對象相對真實位置旋轉的角度;
  4. duration:動畫延續的時間,單位是毫秒;
  5. interpolator:這是插值器,用來指定動畫變化的速率;
  6. pivotX:動畫進行縮放時的中心點x坐標;
  7. pivotY:動畫進行縮放時的中心點y坐標;

這里的pivotXpivotY可以設置絕對坐標,也能夠設置相對本身的相對坐標,和相對父布局的相對坐標%p

2.4.2 java代碼定義旋轉動畫

通過java代碼定義旋轉動畫,

  1. 創建1個RotateAnimation,填入起始角度和結束角度;設置中心坐標時,可以設定坐標的類型,Animation.RELATIVE_TO_SELF表示使用相對本身的位置坐標,Animation.RELATIVE_TO_PARENT表示使用相對父布局的位置坐標,Animation.ABSOLUTE表示使用絕對位置坐標;
  2. 設定延續時間;
  3. 設定插值器;
//使用中心點的絕對位置創建動畫 RotateAnimation anim = new RotateAnimation(0, 360, 50, 150); anim.setDuration(1500); anim.setInterpolator(context, android.R.interpolator.linear); //使用中心點的相對位置創建動畫 ScaleAnimation anim = new ScaleAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5, Animation.RELATIVE_TO_SELF, 0.5); anim.setDuration(1500); anim.setInterpolator(context, android.R.interpolator.linear);

2.5 使用動畫

2.5.1 使用xml定義的動畫

  1. 使用AnimationUtils.loadAnimation()裝載動畫;
  2. 對要使用動畫的對象使用startAnimation()函數,啟動動畫;
Animation anim = AnimationUtils.loadAnimation(this, R.anim.custom_anim); mAnimationTarget.startAnimation(anim);

2.5.2 使用代碼定義的動畫

使用代碼定義的動畫就和使用xml1樣,對要使用動畫的對象使用startAnimation()函數,啟動動畫;

mAnimationTarget.startAnimation(anim);

2.6 多個動畫效果疊加

這幾種動畫不但可以單獨使用,也能夠混合著使用,例如你希望1個對象1邊淡入1邊做平移。

2.6.1 xml定義多個動畫

對同1個對象同時使用多個動畫效果,只要在定義動畫的xml文件中,添加多個希望的動畫就好了。

<?xml version="1.0" encoding="utf⑻"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate ....../> <scale ....../> <translate ....../> <alpha ....../> </set>

2.6.2 java代碼定義多個動畫

在java代碼中可以,

  1. 創建多個動畫;
  2. 創建AnimationSet;
  3. 將創建的多個動畫加入到AnimatonSet當中;
TranslateAnimation anim1 = new TranslateAnimation(...); ScaleAnimation anim2 = new ScaleAnimation(...); AlphaAnimation Anim3 = new AlphaAnimation(...); RotateAnimation anim4 = new RotateAnimation(...); AnimationSet set = new AnimationSet(true); set.addAnimation(anim1); set.addAnimation(anim2); set.addAnimation(anim3); set.addAnimation(anim4); mAnimationTarget.startAnimation(set);

2.7 漸變動畫的監聽

有的時候,需要知道1個動畫履行的狀態,就需要給動畫添加1個監聽器。通過監聽器取得動畫狀態變化的通知。

TranslateAnimation anim = new TranslateAnimation(...); anim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { //動畫開始 } @Override public void onAnimationEnd(Animation animation) { //動畫結束 } @Override public void onAnimationRepeat(Animation animation) { //動畫重復履行 } });

2.8 漸變動畫的其它共同屬性

在前面我們已介紹了android:duration android:interpolator等共同的屬性。現在我們再介紹幾個其它的重要屬性。

2.8.1 android:fillAfter

假定1個按鈕被使用透明效果的動畫,從不透明變到全透明。動畫完成后,這個按鈕會被還原到它的真實狀態(按鈕并沒有消失或透明,依然顯示在之前的位置)。

如果給這個動畫設置了android:fillAfter屬性為true,那末在履行完動畫后,按鈕還是保持動畫最后1幀的效果。

這兩個屬性要設置在<set/>標簽當中才能有效果。

<?xml version="1.0" encoding="utf⑻"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="false"> ...... </set>

也就是說,如果是用代碼創建動畫的話,得把這個動畫放到AnimationSet當中再來設置屬性。

RotateAnimation anim = new RotateAnimation(...); AnimationSet set = new AnimationSet(true); set.addAnimation(anim); set.setFillAfter(true);

2.8.2 android:repeatModeandroid:repeatCount

可以通過設置android:repeatCount的數值,讓動畫重復播放;

  1. 該值為大于0:動畫重復該數值表示的次數;
  2. 該值設置為INFINITE:動畫將會無窮循環進行下去;

android:repeatCount被設置大于0以后,還可以配合使用android:repeatMode

  1. 該值設置為RESTART:每次動畫履行完成后,回到最初狀態重新履行下1次動畫;
  2. 該值設置為REVERSE:每次動畫履行完成后,動畫倒著履行;
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 中文字幕亚洲综合久久久软件 | 日韩福利视频 | 国产一级免费视频 | 精品人伦一区二区三区蜜桃网站 | 国产精品久久久久久久久久久不卡 | 日韩专区在线观看 | 91精品国产综合久久福利不卡 | 久久成人免费视频 | 亚洲欧美激情视频 | 欧美 日韩 国产 一区 | 日韩毛片在线看 | 亚洲成人精品在线 | 日韩欧美一区二区视频 | 特级毛片网站 | 欧美激情视频一区二区三区在线播放 | 久久黄色视 | 精品成人一区二区三区 | 国产精品电影网 | 成人高清在线 | 亚洲精品观看 | 国产精品亚洲第一 | 欧美三级欧美成人高清 | 国产不卡视频一区二区三区 | 欧美日韩精品综合 | 久久99精品一区二区三区三区 | 成人福利网站 | 久久99精品视频 | 成年在线视频 | 国产精品久久久久久久免费软件 | 亚洲国产成人精品女人久 | 久月婷婷| 在线综合av| 91视频在线看 | 国产性色av | 久久成人亚洲 | 国产精品电影一区二区 | aaaa网站| 亚洲丁香社区久久丝袜综合网 | 欧美日韩一区二区三区在线视频 | 中文字幕在线一区二区三区 | 国产欧美日韩在线视频 |