日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android动画(一)-视图动画与帧动画

發布時間:2025/4/5 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android动画(一)-视图动画与帧动画 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目中好久沒用過動畫了,所以關于動畫的知識都忘光了。知識總是不用則忘。正好最近的版本要添加比較炫酷的動畫效果,所以也借著這個機會,寫博客來整理和總結關于動畫的一些知識。也方便自己今后的查閱。

Android中的動畫分為三類。

  • View animation:視圖動畫,也叫做 Tween(補間)動畫。
  • Drawable animation:也叫做Frame 動畫,幀動畫。
  • Property animation: 屬性動畫。支持Android3.0以上版本。

我們根據類別,來分別介紹。

視圖動畫

視圖動畫是一種比較古老的,使用方式比較簡單的動畫。它可以在一個視圖容器內執行一系列的簡單變換(比如大小,旋轉等)。它控制的是整個view。它支持四種效果。透明度旋轉縮放位移。分別對應著 Animation的四個子類,AlphaAnimation,RotateAnimation,ScaleAnimation和TranslateAnimation。

但是視圖動畫有一點需要特別注意,那就是不具備交互性。什么意思呢?比如 一個Button進行了平移變換,已經從之前的A點,移動到了B點。但是你點擊B點,該Button沒反應,相反你點擊A點,該Button才有反應。(雖然它的視圖已經不顯示在A點了)。所以說 視圖動畫改變的只是View的顯示,卻沒有改變View的真實布局屬性值。

視圖動畫可以通過Xml或Android代碼中定義。使用起來比較方便。

如果在xml文件中使用動畫,文件目錄是res/anim/filename.xml,并且View動畫既可以是單個動畫,也可以由一系列動畫組成:
它具體的使用方式如下:

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@[package:]anim/interpolator_resource"android:shareInterpolator=["true" | "false"] ><alphaandroid:fromAlpha="float"android:toAlpha="float" /><scaleandroid:fromXScale="float"android:toXScale="float"android:fromYScale="float"android:toYScale="float"android:pivotX="float"android:pivotY="float" /><translateandroid:fromXDelta="float"android:toXDelta="float"android:fromYDelta="float"android:toYDelta="float" /><rotateandroid:fromDegrees="float"android:toDegrees="float"android:pivotX="float"android:pivotY="float" /><set>...</set> </set>

在代碼中這樣應用。

//@author www.yaoxiaowen.com //本文地址: http://www.cnblogs.com/yaoxiaowen/p/7499556.html Animation myAnim = AnimationUtils.loadAnimation(this, R.anim.filename); myView.startAnimation(myAnim);

而如果不借助于xml文件,直接在java代碼中定義,則類似這樣使用:

//旋轉動畫, 旋轉參考系為自身中心點 //@author www.yaoxiaowen.com //本文地址: http://www.cnblogs.com/yaoxiaowen/p/7499556.html RotateAnimation ra = new RotateAnimation(0, 360, RotateAnimation.RELATIVE_TO_SELF, 0.5F,RotateAnimation.RELATIVE_TO_SELF, 0.5F);ra.setDuration(5000); myView.startAnimation(ra);

知道了基本用法,那么我們下面要做的,就是熟悉相關api了。。(具體api內容,參考了該篇博客,在此表示感謝)。

Animation是abstract的,它也是AlphaAnimation等視圖動畫的基類。

Animation類相關屬性方法如下:

xml屬性java方法解釋
android:detachWallpapersetDetachWallpaper(boolean)是否在壁紙上運行
android:durationsetDuration(long)動畫持續時間,毫秒為單位
android:fillAftersetFillAfter(boolean)控件動畫結束時是否保持動畫最后的狀態
android:fillBeforesetFillBefore(boolean)控件動畫結束時是否還原到開始動畫前的狀態
android:fillEnabledsetFillEnabled(boolean)與android:fillBefore效果相同
android:interpolatorsetInterpolator(Interpolator)設定插值器(指定的動畫效果,譬如回彈等)
android:repeatCountsetRepeatCount(int)重復次數
android:repeatModesetRepeatMode(int)重復類型有兩個值,reverse表示倒序回放,restart表示從頭播放
android:startOffsetsetStartOffset(long)調用start函數之后等待開始運行的時間,單位為毫秒
android:zAdjustmentsetZAdjustment(int)表示被設置動畫的內容運行時在Z軸上的位置(top/bottom/normal),默認為normal

除此之外,Animation還有一些常用的方法:

Animation類的方法解釋
reset()重置Animation的初始化
cancel()取消Animation動畫
start()開始Animation動畫
setAnimationListener(AnimationListener listener)給當前Animation設置動畫監聽
hasStarted()判斷當前Animation是否開始
hasEnded()判斷當前Animation是否結束

Alpha相關屬性:

xml屬性java方法解釋
android:fromAlphaAlphaAnimation(float fromAlpha, …)動畫開始的透明度(0.0到1.0,0.0是全透明,1.0是不透明)
android:toAlphaAlphaAnimation(…, float toAlpha)動畫結束的透明度,同上

Rotate相關屬性:

xml屬性java方法解釋
android:fromDegreesRotateAnimation(float fromDegrees, …)旋轉開始角度,正代表順時針度數,負代表逆時針度數
android:toDegreesRotateAnimation(…, float toDegrees, …)旋轉結束角度,正代表順時針度數,負代表逆時針度數
android:pivotXRotateAnimation(…, float pivotX, …)縮放起點X坐標(數值、百分數、百分數p,譬如50表示以當前View左上角坐標加50px為初始點、50%表示以當前View的左上角加上當前View寬高的50%做為初始點、50%p表示以當前View的左上角加上父控件寬高的50%做為初始點)
android:pivotYRotateAnimation(…, float pivotY)縮放起點Y坐標,同上規律

Scale相關屬性:

xml屬性java方法解釋
android:fromXScaleScaleAnimation(float fromX, …)初始X軸縮放比例,1.0表示無變化
android:toXScaleScaleAnimation(…, float toX, …)結束X軸縮放比例
android:fromYScaleScaleAnimation(…, float fromY, …)初始Y軸縮放比例
android:toYScaleScaleAnimation(…, float toY, …)結束Y軸縮放比例
android:pivotXScaleAnimation(…, float pivotX, …)縮放起點X軸坐標(數值、百分數、百分數p,譬如50表示以當前View左上角坐標加50px為初始點、50%表示以當前View的左上角加上當前View寬高的50%做為初始點、50%p表示以當前View的左上角加上父控件寬高的50%做為初始點)
android:pivotYScaleAnimation(…, float pivotY)縮放起點Y軸坐標,同上規律

Translate相關屬性:

xml屬性java方法解釋
android:fromXDeltaTranslateAnimation(float fromXDelta, …)起始點X軸坐標(數值、百分數、百分數p,譬如50表示以當前View左上角坐標加50px為初始點、50%表示以當前View的左上角加上當前View寬高的50%做為初始點、50%p表示以當前View的左上角加上父控件寬高的50%做為初始點)
android:fromYDeltaTranslateAnimation(…, float fromYDelta, …)起始點Y軸從標,同上規律
android:toXDeltaTranslateAnimation(…, float toXDelta, …)結束點X軸坐標,同上規律
android:toYDeltaTranslateAnimation(…, float toYDelta)結束點Y軸坐標,同上規律

另外還有一個AnimationSet,它代表的是一系列動畫的組合。
在代碼當中我們可以這樣使用:

//@author www.yaoxiaowen.com //本文地址: http://www.cnblogs.com/yaoxiaowen/p/7499556.html AnimationSet as = new AnimationSet(true); as.setDuration(1000);AlphaAnimation aa = new AlphaAnimation(0, 1); aa.setDuration(1000); as.addAnimation(aa);TranslateAnimation ta = new TranslateAnimation(0, 100, 0, 200); ta.setDuration(1000); as.addAnimation(ta);btn7.startAnimation(as);

但是值得注意的是,如果我們對AnimationSet設置了一些屬性,那么有些屬性會影響到它所包含的子控件,而有些則不會。API文檔上是這樣解釋的。

The way that AnimationSet inherits behavior from Animation is important to understand. Some of the Animation attributes applied to AnimationSet affect the AnimationSet itself, some are pushed down to the children, and some are ignored, as follows:

  • duration, repeatMode, fillBefore, fillAfter: These properties, when set on an AnimationSet object, will be pushed down to all child animations.
  • repeatCount, fillEnabled: These properties are ignored for AnimationSet.
  • startOffset, shareInterpolator: These properties apply to the AnimationSet itself.

視圖動畫是供View使用的,而View基類中和動畫相關的常用方法如下:

View類的常用動畫操作方法解釋
startAnimation(Animation animation)對當前View開始設置的Animation動畫
clearAnimation()取消當View在執行的Animation動畫

幀動畫

幀動畫是一種比較簡單的動畫,利用多張圖片就像放電影那樣輪流播放,然后就形成了動畫效果。或者說像播放幻燈片也是一個道理。因為它實質上就是多張圖,所以它也叫作 Drawable動畫。系統提供了 AnimationDrawable類來使用 幀動畫。該類和 Animation沒有繼承關系。

Goole官方demo給出的使用方式如下:

<!-- Animation frames are wheel0.png through wheel5.pngfiles inside the res/drawable/ folder --><animation-list android:id="@+id/selected" android:oneshot="false"><item android:drawable="@drawable/wheel0" android:duration="50" /><item android:drawable="@drawable/wheel1" android:duration="50" /><item android:drawable="@drawable/wheel2" android:duration="50" /><item android:drawable="@drawable/wheel3" android:duration="50" /><item android:drawable="@drawable/wheel4" android:duration="50" /><item android:drawable="@drawable/wheel5" android:duration="50" /></animation-list>

在java代碼中加載使用該動畫。

// Load the ImageView that will host the animation and// set its background to our AnimationDrawable XML resource.ImageView img = (ImageView)findViewById(R.id.spinning_wheel_image);img.setBackgroundResource(R.drawable.spin_animation);// Get the background, which has been compiled to an AnimationDrawable object.AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground();// Start the animation (looped playback by default).frameAnimation.start();

對于幀動畫,注意以下幾點就ok了。

  • android:oneshot屬性:true表示動畫只播放一次,然后停止在最后一幀上,false表示動畫循環播放。
    item代表每一幀的圖片, android:drawable表示具體圖片引用,android:duration表示每一幀停留的時間。
  • AnimationDrawable#start()方法不可以在Activity#onCreate()方法中調用,這和AnimationDrawable還未完全附著到window上有關,因此最好的調用時機是在Activity#onWindowFocusChanged()方法中。

Activity或fragment的切換動畫

跳轉Activity時,系統有默認的切換效果,不過我們也可以自定義,只要直接調用Activity中的一個方法即可,

/*** @author www.yaoxiaowen.com* @param enterAnim 進入Activity時,所需要的動畫資源id, 傳遞 0 代表 不使用動畫效果* @param exitAnim 離開Activity時,所需要的動畫資源id, 傳遞 0 代表 不使用動畫效果*/ public void overridePendingTransition (int enterAnim, int exitAnim)

但是該方法必須要緊跟著startActivity(Intent)或finish()方法后面立即被調用,否則沒效果。
類似下面這樣

//www.yaoxiaowen.com @Override public void finish() {super.finish();overridePendingTransition(0, R.anim.exit_anim); }

而Fragment也可以添加切換動畫。則要使用FragmentTransaction中的這個方法。

FragmentTransaction setCustomAnimations (int enter, int exit)

不過要注意,Activity或fragment添加的動畫都應該是 視圖動畫,而不是屬性動畫。


作者: www.yaoxiaowen.com

博客地址: www.cnblogs.com/yaoxiaowen/

github: https://github.com/yaowen369

歡迎對于本人的博客內容批評指點,如果問題,可評論或郵件(yaowen369@gmail.com)聯系

歡迎轉載,轉載請注明出處.謝謝

總結

以上是生活随笔為你收集整理的Android动画(一)-视图动画与帧动画的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 偷偷色噜狠狠狠狠的777米奇 | 综合在线亚洲 | 成人爱爱免费视频 | 欧美视频观看 | 美脚の诱脚舐め脚视频播放 | 两个人看的www视频免费完整版 | 屁股夹体温计调教play | 欧美大片一级 | 亚洲AV综合色区国产精品天天 | 国产日本欧美一区二区 | 97人人草 | 四虎影| 男女做爰真人视频直播 | 99热这里只有精品在线观看 | 欧美天堂网站 | 成年人三级视频 | 欧美亚洲一区 | 久草免费看 | 欧美三级又粗又硬 | 朝鲜一级黄色片 | 综合色婷婷一区二区亚洲欧美国产 | 一区二区三区欧美在线 | 全部孕妇毛片丰满孕妇孕交 | 91麻豆精品国产91久久久无需广告 | 成年女人免费视频 | a级大片免费看 | 色一情一乱一区二区三区 | 四虎8848精品成人免费网站 | 丰满少妇被猛烈进入 | 国产免费高清 | 521av在线| 自拍愉拍 | 麻豆影视在线播放 | 亚洲性免费| 亚洲剧情在线 | 亚洲精品毛片av | 久久久久久久国产精品美女 | 日本一区二区高清视频 | 国产精品久久久久久久久绿色 | 国产免费视频 | 爱草在线视频 | 三级黄网 | 日韩av网址在线观看 | 九九热国产视频 | 日本三级韩国三级美三级91 | 国产激情免费 | 日本一区二区三区视频免费看 | 人妖一区二区三区 | 亚洲精品视频一区 | 久久久高清视频 | 末路1997全集免费观看完整版 | 欧美一区二区三区在线观看 | 色激情五月| 国产又粗又大又黄 | 蜜桃视频在线观看污 | 亚洲一区二区三区四区在线观看 | 九色tv| 男人天堂久久久 | 五月婷婷在线视频 | 夜夜操夜夜骑 | 国产精品久久久久久久裸模 | 久久99日韩 | 一级黄色av | 国产夫绿帽单男3p精品视频 | 97爱视频| 日韩av黄色片 | 日本不卡一二三 | 天天干天天添 | av网站久久 | 污的网站 | 久久性av | 日本少妇xxx | 欧美性猛交xxxx免费看久久久 | 91在线观看免费高清 | 哪里可以免费看毛片 | 日本一区二区三区免费看 | 黄色在线小视频 | www.伊人网 | 日本大奶视频 | 欧美性受xxxx黑人xyx性 | 色老板精品凹凸在线视频观看 | 男人你懂的网站 | 91视频最新 | 果冻av在线| 日韩av一区二区三区 | 久久久精品国产免费爽爽爽 | 国产精品伦一区 | 小视频在线免费观看 | 亚洲中文字幕97久久精品少妇 | 欧洲亚洲女同hd | 亚洲精久久 | 精品视频一区二区 | 在线免费福利 | 日韩有码第一页 | 亚欧美| 欧美狠狠爱 | 99国产精品久久久久久久成人热 | 日韩精品视频在线播放 | 国产一区二区精品在线观看 |