1.Android 動(dòng)畫的工作原理?

創(chuàng)新互聯(lián)于2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元上街做網(wǎng)站,已為上家服務(wù),為上街各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
在android系統(tǒng)中動(dòng)畫分為兩種分別是幀動(dòng)畫和屬性動(dòng)畫。對(duì)于動(dòng)畫的工作原理主要涉及到的是幀動(dòng)畫的實(shí)現(xiàn)。
幀動(dòng)畫主要有旋轉(zhuǎn)RotatleAnimation,縮放ScaleAnimation,透明AlphaAnimation,平移TranslateAnimation等都是Animation的子類。Animation控制動(dòng)畫的效果,Transformation 對(duì)動(dòng)畫進(jìn)行計(jì)算。
對(duì)于動(dòng)畫的原理簡(jiǎn)單說就是從一個(gè)動(dòng)畫的啟動(dòng)狀態(tài),到動(dòng)畫結(jié)束狀態(tài),和動(dòng)畫持續(xù)總時(shí)間,在這段時(shí)間中任一時(shí)間點(diǎn)動(dòng)畫的狀態(tài)計(jì)算和顯示的過程。
計(jì)算 :是通過Animation的getTransformation()方法首先對(duì)時(shí)間進(jìn)行歸一化時(shí)間讓時(shí)間在0~1之間,進(jìn)行計(jì)算。滿足條件之后就會(huì)調(diào)用applyTransformation()方法處理實(shí)現(xiàn)動(dòng)畫類型的計(jì)算。當(dāng)前時(shí)間點(diǎn)的轉(zhuǎn)換狀態(tài)保存到Transformation 的Matrix中等待顯示的時(shí)候使用。
顯示 :動(dòng)畫顯示工作主要依賴于Choreograther類,此類是線程唯一的,Choreograther和Handler用法類似,都是通過post一個(gè)Runnable對(duì)象到隊(duì)列中等待VSYSC屏幕垂直同步信號(hào)刷新(16ms)刷新一次,然后觸發(fā)ViewRootImpl的view的遍歷工作,回調(diào)到view.draw()方法時(shí)就會(huì)把之前applyTransformation 計(jì)算的此時(shí)刻的Transformation 的Matrix賦值到Canvas上, 這也就是為什么我們使用幀動(dòng)畫時(shí)候我們的view的屬性并沒有改變,這就是根源因?yàn)橛?jì)算得到的Matrix被Canvas使用了,并沒有直接賦值到我們的view上。 對(duì)于屬性動(dòng)畫來說主要使用animator實(shí)現(xiàn)看下面解析:
2.Animation 和 Animator 的區(qū)別?
Animation和Animator都是抽象類,都有子類,Animation通過Transformation對(duì)動(dòng)畫進(jìn)行Matrix轉(zhuǎn)換來作用到Canvas上實(shí)現(xiàn)動(dòng)畫效果。而Animator只是一個(gè)工具類,主要是用來控制在一段時(shí)間內(nèi)某一個(gè)值的變化過程,然后我們?cè)俑鶕?jù)這個(gè)值來作用到view的屬性上,以此來實(shí)現(xiàn)動(dòng)畫效果。為了讓這個(gè)變化的過程能達(dá)到加速減速等變化效果系統(tǒng)提供了插值器Interpolator。他們的實(shí)現(xiàn)思想都是一致的。
3.幀動(dòng)畫 和 屬性動(dòng)畫的區(qū)別?
屬性動(dòng)畫對(duì)比原來的視圖動(dòng)畫有很多的優(yōu)點(diǎn),屬性動(dòng)畫可以對(duì)所有的對(duì)象做動(dòng)畫操作,但Android開發(fā)中需要做動(dòng)畫最多的還是View,如果只是對(duì)一個(gè)view做動(dòng)畫,很少的幾個(gè)屬性還行,如果是對(duì)同一個(gè)view的十幾個(gè)屬性同時(shí)做動(dòng)畫,相信屬性動(dòng)畫的寫法是比較繁瑣的。ViewPropertyAnimator從名字就可以看出是專用于View的屬性動(dòng)畫,在API12被提供。ViewPropertyAnimator專用于操作View動(dòng)畫,語(yǔ)法更加簡(jiǎn)潔,使用更加方便。
developer:
如何獲取ViewPropertyAnimator 對(duì)象:
ViewPropertyAnimator 沒有構(gòu)造函數(shù),通過View.animate()方法可以方便的獲取ViewPropertyAnimator 對(duì)象,此時(shí)獲取的動(dòng)畫對(duì)象就專用于操作當(dāng)前view。
setDuration(); //設(shè)置動(dòng)畫時(shí)長(zhǎng)
setInterpolator(); //設(shè)置插值器
setStartDelay(); //設(shè)置延遲開始時(shí)間
start(); //立刻開始動(dòng)畫
cancel(); //取消動(dòng)畫
明顯看到圖片先往下走了一段,然后向左的動(dòng)畫才開始執(zhí)行。
鏈?zhǔn)讲僮?/p>
ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate().setDuration(2000).translationY(300).scaleX(0.5f);
以上函數(shù)的執(zhí)行,會(huì)導(dǎo)致相同動(dòng)畫的cancle,以上函數(shù)都是除了坐標(biāo)相關(guān)都是以view左上角為坐標(biāo)原點(diǎn)。
方法都比較簡(jiǎn)單,下面距幾個(gè)列子:
首先利用translationX,translationXBy來區(qū)分By的意義:
ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate().setDuration(3000).translationY(300);
ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate().setDuration(3000).translationYBy(300);
translationYBy 可以多次移動(dòng)View,translationY多次執(zhí)行沒有效果。
ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate().setDuration(3000).x(100).y(100);
ViewPropertyAnimator viewPropertyAnimator = gongxiang.animate().setDuration(2000).rotation(270);
據(jù)觀察withEndAction相當(dāng)于動(dòng)畫開始,withStartAction相當(dāng)于動(dòng)畫結(jié)束。
可以看到可以添加setUpdateListener監(jiān)聽,但無法通過這個(gè)監(jiān)聽函數(shù)監(jiān)聽到當(dāng)前動(dòng)畫的信息,所以這個(gè)監(jiān)聽函數(shù)可能用處不大。
Animation動(dòng)畫概述和執(zhí)行原理
Android動(dòng)畫之補(bǔ)間動(dòng)畫TweenAnimation
Android動(dòng)畫之逐幀動(dòng)畫FrameAnimation
Android動(dòng)畫之插值器簡(jiǎn)介和系統(tǒng)默認(rèn)插值器
Android動(dòng)畫之插值器Interpolator自定義
Android動(dòng)畫之視圖動(dòng)畫的缺點(diǎn)和屬性動(dòng)畫的引入
Android動(dòng)畫之ValueAnimator用法和自定義估值器
Android動(dòng)畫之ObjectAnimator實(shí)現(xiàn)補(bǔ)間動(dòng)畫和ObjectAnimator自定義屬性
Android動(dòng)畫之ObjectAnimator中ofXX函數(shù)全解析-自定義Property,TypeConverter,TypeEvaluator
Android動(dòng)畫之AnimatorSet聯(lián)合動(dòng)畫用法
Android動(dòng)畫之LayoutTransition布局動(dòng)畫
Android動(dòng)畫之共享元素動(dòng)畫
Android動(dòng)畫之ViewPropertyAnimator(專用于view的屬性動(dòng)畫)
Android動(dòng)畫之Activity切換動(dòng)畫overridePendingTransition實(shí)現(xiàn)和Theme Xml方式實(shí)現(xiàn)
Android動(dòng)畫之ActivityOptionsCompat概述
Android動(dòng)畫之場(chǎng)景變換Transition動(dòng)畫的使用
Android動(dòng)畫之Transition和TransitionManager使用
Android動(dòng)畫之圓形揭露動(dòng)畫Circular Reveal
Android 動(dòng)畫之 LayoutAnimation 動(dòng)畫
Android動(dòng)畫之視圖動(dòng)畫的缺點(diǎn)和屬性動(dòng)畫的引入
Android的動(dòng)畫屬性有4種:
Alpha:漸變透明度動(dòng)畫效果
Scale:漸變尺寸伸縮動(dòng)畫效果
Translate:畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果
Rotate:畫面旋轉(zhuǎn)動(dòng)畫效果
TweenAnimation 通用屬性[類型] 功能 Duration[long] 屬性為動(dòng)畫持續(xù)時(shí)間 時(shí)間以毫秒為單位
fillAfter[boolean] 當(dāng)設(shè)置為true ,該動(dòng)畫轉(zhuǎn)化在動(dòng)畫結(jié)束后被應(yīng)用
fillBefore[boolean]當(dāng)設(shè)置為true ,該動(dòng)畫轉(zhuǎn)化在動(dòng)畫開始前被應(yīng)用
interpolator 指定一個(gè)動(dòng)畫的插入器 有一些常見的插入器
accelerate_decelerate_interpolator
加速-減速動(dòng)畫插入器
accelerate_interpolator
加速-動(dòng)畫插入器
decelerate_interpolator
減速- 動(dòng)畫插入器
其他的屬于特定的動(dòng)畫效果
repeatCount[int] 動(dòng)畫的重復(fù)次數(shù)
RepeatMode[int]定義重復(fù)的行為 1:重新開始 2:playsbackward
startOffset[long] 動(dòng)畫之間的時(shí)間間隔,從上次動(dòng)畫停多少時(shí)間開始執(zhí)行下個(gè)動(dòng)畫
zAdjustment[int] 定義動(dòng)畫的Z Order的改變0:保持Z Order不變
1:保持在最上層
-1:保持在最下層
--
!-- 尺寸伸縮動(dòng)畫效果 scale
屬性:interpolator 指定一個(gè)動(dòng)畫的插入器
有三種動(dòng)畫插入器:
accelerate_decelerate_interpolator 加速-減速動(dòng)畫插入器
accelerate_interpolator 加速-動(dòng)畫插入器
decelerate_interpolator 減速- 動(dòng)畫插入器
其他的屬于特定的動(dòng)畫效果
fromXScale屬性為動(dòng)畫起始時(shí)X坐標(biāo)上的伸縮尺寸
toXScale 屬性為動(dòng)畫結(jié)束時(shí)X坐標(biāo)上的伸縮尺寸
fromYScale屬性為動(dòng)畫起始時(shí)Y坐標(biāo)上的伸縮尺寸
toYScale 屬性為動(dòng)畫結(jié)束時(shí)Y坐標(biāo)上的伸縮尺寸
說明:
以上四種屬性值
0.0表示收縮到?jīng)]有
1.0表示正常無伸縮
值小于1.0表示收縮
值大于1.0表示放大
pivotX 屬性為動(dòng)畫相對(duì)于物件的X坐標(biāo)的開始位置
pivotY 屬性為動(dòng)畫相對(duì)于物件的Y坐標(biāo)的開始位置
說明:
以上兩個(gè)屬性值從0%-100%中取值
50%為物件的X或Y方向坐標(biāo)上的中點(diǎn)位置
長(zhǎng)整型值:
duration 屬性為動(dòng)畫持續(xù)時(shí)間
說明: 時(shí)間以毫秒為單位
布爾型值:
fillAfter屬性當(dāng)設(shè)置為true ,該動(dòng)畫轉(zhuǎn)化在動(dòng)畫結(jié)束后被應(yīng)用
--
!--
畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果translate
fromXDeltatoXDelta 為動(dòng)畫、結(jié)束起始時(shí) X坐標(biāo)上的位置
fromYDeltatoYDelta 為動(dòng)畫、結(jié)束起始時(shí) Y坐標(biāo)上的位置
--
!--
畫面轉(zhuǎn)移旋轉(zhuǎn)動(dòng)畫效果rotate
fromDegrees為動(dòng)畫起始時(shí)物件的角度 說明
當(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)畫結(jié)束時(shí)物件旋轉(zhuǎn)的角度 可以大于360度
pivotX
pivotY 為動(dòng)畫相對(duì)于物件的X、Y坐標(biāo)的開始位 說明:以上兩個(gè)屬性值從0%-100%中取值
50%為物件的X或Y方向坐標(biāo)上的中點(diǎn)位置
--
屬性動(dòng)畫又稱補(bǔ)間動(dòng)畫,可以高效完成簡(jiǎn)單的動(dòng)畫效果。(是通過閥值器來調(diào)整的)從而節(jié)約內(nèi)存空間。
有比較才有傷害,對(duì)比幀動(dòng)畫,是通過不同的圖片的切換來實(shí)現(xiàn)動(dòng)畫的效果,是非常耗內(nèi)存的,但可以實(shí)現(xiàn)復(fù)雜的動(dòng)畫內(nèi)容。
所以兩者各有所長(zhǎng)短,實(shí)際上他們應(yīng)用在不同的地方。屬性動(dòng)畫多用于控件的狀態(tài)變化,而幀動(dòng)畫用于展現(xiàn)復(fù)雜且連續(xù)的圖片(如,等待動(dòng)畫,短視頻)。
Android 動(dòng)畫主要分為分為兩大類(三種):
下面。我將簡(jiǎn)單介紹這兩大類、三種 Android 常用動(dòng)畫
根據(jù)不同的動(dòng)畫效果,補(bǔ)間動(dòng)畫分為4種動(dòng)畫:
具體效果分別如下:
較為復(fù)雜的個(gè)性化動(dòng)畫效果。
將動(dòng)畫拆分后的圖片幀
在 Android 3.0 ( API 11 )后才提供的一種全新動(dòng)畫模式
與屬性相關(guān)、更加復(fù)雜的動(dòng)畫效果。
不定期分享關(guān)于 安卓開發(fā) 的干貨,追求 短、平、快 ,但 卻不缺深度 。
文章名稱:android動(dòng)畫屬性,android動(dòng)畫框架
分享鏈接:http://chinadenli.net/article26/dsijgjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、定制開發(fā)、建站公司、服務(wù)器托管、外貿(mào)建站、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)