Android實(shí)現(xiàn)動(dòng)畫(huà)效果詳解
目前Android平臺(tái)提供了兩類(lèi)動(dòng)畫(huà)一類(lèi)是Tween動(dòng)畫(huà),第二類(lèi)就是 Frame動(dòng)畫(huà),具體內(nèi)容介紹請(qǐng)看下文:
一類(lèi)是Tween動(dòng)畫(huà),就是對(duì)場(chǎng)景里的對(duì)象不斷的進(jìn)行圖像變化來(lái)產(chǎn)生動(dòng)畫(huà)效果(旋轉(zhuǎn)、平移、放縮和漸變)。
第二類(lèi)就是 Frame動(dòng)畫(huà),即順序的播放事先做好的圖像,與gif圖片原理類(lèi)似。
實(shí)現(xiàn)動(dòng)畫(huà)有兩種方式:一種使用XML文件(文件放在res/anim),一種直接代碼搞定
1、透明度控制動(dòng)畫(huà)效果alpha
<!-- 透明度控制動(dòng)畫(huà)效果alpha 浮點(diǎn)型值: fromAlpha 動(dòng)畫(huà)起始時(shí)透明度 toAlpha 動(dòng)畫(huà)結(jié)束時(shí)透明度 說(shuō)明:0.0 完全透明 1.0 完全不透明 以上值取0.0-1.0之間的 float數(shù)據(jù)類(lèi)型的數(shù)字 duration 為動(dòng)畫(huà)持續(xù)時(shí)間 長(zhǎng)整型: 說(shuō)明:時(shí)間以毫秒為單位 --> <alpha android:duration="3000" android:fromAlpha="0.0" android:toAlpha="1.0" />
代碼方式:
Animation animationAlpha = new AlphaAnimation(0.0f, 1.0f);
animationAlpha.setDuration(3000);
ivAnim.startAnimation(animationAlpha);
2、rotate旋轉(zhuǎn)動(dòng)畫(huà)
<!-- rotate旋轉(zhuǎn)動(dòng)畫(huà)效果 屬性:interpolator 指定一個(gè)動(dòng)畫(huà)的插入器 有三種動(dòng)畫(huà)插入器: accelerate_decelerate_interpolator 加速-減速 動(dòng)畫(huà)插入器 accelerate_interpolator 加速-動(dòng)畫(huà)插入器 decelerate_interpolator 減速-動(dòng)畫(huà)插入器 其他的屬于特定的動(dòng)畫(huà)效果 浮點(diǎn)整型值: fromDegrees 為動(dòng)畫(huà)起始時(shí)物件的角度 toDegrees 為動(dòng)畫(huà)起始時(shí)物件旋轉(zhuǎn)的角度 可以大于360度 說(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)) pivotX 為動(dòng)畫(huà)相對(duì)于物件的X坐標(biāo)的開(kāi)始位置 pivotY 為動(dòng)畫(huà)相對(duì)于物件的Y坐標(biāo)的開(kāi)始位置 說(shuō)明:以上兩個(gè)屬性值 從0%——100%中取值 50%為物件的X或Y方向坐標(biāo)上的中點(diǎn)位置 長(zhǎng)整型類(lèi)型: duration 為動(dòng)畫(huà)持續(xù)時(shí)間 說(shuō)明:時(shí)間以毫秒為單位 --> <rotate android:duration="3000" android:fromDegrees="0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toDegrees="+350" />
Animation animationRotate = new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animationRotate.setDuration(3000);
ivAnim.startAnimation(animationRotate);
3、尺寸伸縮動(dòng)畫(huà)效果 scale
<!-- 尺寸伸縮動(dòng)畫(huà)效果 scale 屬性:interpolator 指定一個(gè)動(dòng)畫(huà)的插入器 有三種動(dòng)畫(huà)插入器: accelerate_decelerate_interpolator 加速-減速 動(dòng)畫(huà)插入器 accelerate_interpolator 加速-動(dòng)畫(huà)插入器 decelerate_interpolator 減速-動(dòng)畫(huà)插入器 其他的屬于特定的動(dòng)畫(huà)效果 浮點(diǎn)型值: fromXScale 動(dòng)畫(huà)起始時(shí) X坐標(biāo)上的伸縮尺寸 toXScale 動(dòng)畫(huà)結(jié)束時(shí) X坐標(biāo)上的伸縮尺寸 fromYScale 動(dòng)畫(huà)起始 Y時(shí)坐標(biāo)上的伸縮尺寸 toYScale 動(dòng)畫(huà)結(jié)束時(shí) Y坐標(biāo)上的尺寸 說(shuō)明:以上四種屬性值 0.0表示收縮到?jīng)]有 1.0表示正常無(wú)伸縮 值小于1.0表示收縮 值大于1.0表示放大 pivotX 動(dòng)畫(huà)相對(duì)于物件的X坐標(biāo)的開(kāi)始位置 pivotY 動(dòng)畫(huà)相對(duì)于武將的Y坐標(biāo)的開(kāi)始位置 說(shuō)明:以上兩個(gè)屬性值 從0%-100%中取值 長(zhǎng)整型: duration 動(dòng)畫(huà)持續(xù)時(shí)間 說(shuō)明:時(shí)間以毫秒為單位 布爾型值: fillAfter 當(dāng)設(shè)置為true,該動(dòng)畫(huà)轉(zhuǎn)化在動(dòng)畫(huà)結(jié)束后被應(yīng)用 --> <scale android:duration="700" android:fillAfter="false" android:fromXScale="0.0" android:fromYScale="0.0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.4" android:toYScale="1.4" />
代碼方式:
Animation animationScale = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); animationScale.setDuration(3000); ivAnim.startAnimation(animationScale);
4、translate 位置轉(zhuǎn)移動(dòng)畫(huà)效果
<!-- translate 位置轉(zhuǎn)移動(dòng)畫(huà)效果 整型值: fromXDelta 動(dòng)畫(huà)起始時(shí) X坐標(biāo)上的位置 toXDelta 動(dòng)畫(huà)結(jié)束時(shí) X坐標(biāo)上的位置 fromYDelta 動(dòng)畫(huà)起始時(shí) Y坐標(biāo)上的位置 toYDlta 動(dòng)畫(huà)結(jié)束時(shí) Y坐標(biāo)上的位置 注意:沒(méi)有指定fromXTra toXType fromYType toYType 時(shí)候,默認(rèn)是以自己為相對(duì)參照物 長(zhǎng)整型:duration 為動(dòng)畫(huà)持續(xù)時(shí)間 時(shí)間以毫秒為單位 --> <translate android:duration="2000" android:fromXDelta="30" android:fromYDelta="30" android:toXDelta="-80" android:toYDelta="300" />
Animation animationTranslate = new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
animationTranslate.setDuration(3000);
ivAnim.startAnimation(animationTranslate);
xml文件方式使用的話就兩行代碼
Animation anim = AnimationUtils.loadAnimation(activity, R.anim.anim_xxx);
ivAnim.startAnimation(anim);
5、frame幀動(dòng)畫(huà)(文件放在res/drawable)
<!-- 根標(biāo)簽為animation-list,其中oneshot代表著是否只展示一遍,設(shè)置為false會(huì)不停的循環(huán)播放動(dòng)畫(huà) 根標(biāo)簽下,通過(guò)item標(biāo)簽對(duì)動(dòng)畫(huà)中的每一個(gè)圖片進(jìn)行聲明 android:duration 表示展示所用的該圖片的時(shí)間長(zhǎng)度 --> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true" > <item android:drawable="@drawable/icon_frame1" android:duration="200"> </item> <item android:drawable="@drawable/icon_frame2" android:duration="200"> </item> <item android:drawable="@drawable/icon_frame3" android:duration="200"> </item> <item android:drawable="@drawable/icon_frame4" android:duration="200"> </item> <item android:drawable="@drawable/icon_frame5" android:duration="200"> </item> <item android:drawable="@drawable/icon_frame6" android:duration="50"> </item> </animation-list>xml幀動(dòng)畫(huà)使用代碼:
ivFrame = (ImageView) findViewById(R.id.iv_frame_image); ivFrame.setImageResource(R.drawable.anim_frame); animation = (AnimationDrawable) ivFrame.getDrawable(); animation.setOneShot(false);//循環(huán) animation.start();
以上就是針對(duì)Android實(shí)現(xiàn)動(dòng)畫(huà)效果的全部?jī)?nèi)容,希望大家能夠喜歡。
- Android編程之Animation動(dòng)畫(huà)詳解
- Android編程中Tween動(dòng)畫(huà)和Frame動(dòng)畫(huà)實(shí)例分析
- Android編程之簡(jiǎn)單逐幀動(dòng)畫(huà)Frame的實(shí)現(xiàn)方法
- 圖文詳解Android屬性動(dòng)畫(huà)
- Android編程實(shí)現(xiàn)仿心跳動(dòng)畫(huà)效果的方法
- Android編程之界面跳動(dòng)提示動(dòng)畫(huà)效果實(shí)現(xiàn)方法
- Android編程根據(jù)系列圖片繪制動(dòng)畫(huà)實(shí)例總結(jié)
- Android中顯示GIF動(dòng)畫(huà)的實(shí)現(xiàn)代碼
- Android動(dòng)畫(huà)之漸變動(dòng)畫(huà)(Tween Animation)詳解 (漸變、縮放、位移、旋轉(zhuǎn))
相關(guān)文章
Android編程實(shí)現(xiàn)橫豎屏切換時(shí)不銷(xiāo)毀當(dāng)前activity和鎖定屏幕的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)橫豎屏切換時(shí)不銷(xiāo)毀當(dāng)前activity和鎖定屏幕的方法,涉及Android屬性設(shè)置及activity操作的相關(guān)技巧,需要的朋友可以參考下2015-11-11android canvas drawText()文字居中效果
這篇文章主要為大家詳細(xì)介紹了android canvas drawText()文字居中效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Kotlin開(kāi)發(fā)筆記之委托屬性與區(qū)間(譯)
最近在學(xué)習(xí)kotlin,發(fā)現(xiàn)了一些比較重要的知識(shí)點(diǎn),所以下面這篇文章主要給大家介紹了關(guān)于Kotlin開(kāi)發(fā)筆記之委托屬性與區(qū)間的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-12-12Android APK優(yōu)化工具Zipalign詳解
本文主要介紹Android APK優(yōu)化工具Zipalign,這里整理了相關(guān)資料,并詳細(xì)介紹如何使用Zipalign工具及使用技巧,有需要的小伙伴可以參考下2016-09-09Android App使用SQLite數(shù)據(jù)庫(kù)的一些要點(diǎn)總結(jié)
這篇文章主要介紹了Android App使用SQLite數(shù)據(jù)庫(kù)的一些要點(diǎn)總結(jié),使用Sqlite作為應(yīng)用的嵌入式數(shù)據(jù)庫(kù)非常輕便,需要的朋友可以參考下2016-03-03Android編程實(shí)現(xiàn)activity dialog透明背景的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)activity dialog透明背景的方法,涉及Activity相關(guān)屬性設(shè)置及配置文件操作技巧,需要的朋友可以參考下2017-07-07android自定義等級(jí)評(píng)分圓形進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了android自定義等級(jí)評(píng)分圓形進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07