《Android應(yīng)用開發(fā)教程第2版》課件26-動畫技術(shù)_第1頁
《Android應(yīng)用開發(fā)教程第2版》課件26-動畫技術(shù)_第2頁
《Android應(yīng)用開發(fā)教程第2版》課件26-動畫技術(shù)_第3頁
《Android應(yīng)用開發(fā)教程第2版》課件26-動畫技術(shù)_第4頁
《Android應(yīng)用開發(fā)教程第2版》課件26-動畫技術(shù)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

動畫技術(shù)《Android應(yīng)用開發(fā)教程》黑龍江吉林山東西藏新疆浙江臺灣課堂引入問題:Android中的動畫如何實現(xiàn)?掌握逐幀動畫技術(shù)掌握補間動畫實現(xiàn)方式掌握屬性動畫技術(shù)學習內(nèi)容逐幀動畫1補間動畫2屬性動畫34逐幀動畫逐幀動畫就是順序播放事先準備好的靜態(tài)圖像,利用人眼的“視覺暫留”原理,給用戶造成動畫的錯覺。(1)首先在Android的drawable資源文件夾中存放動畫所用的圖片資源,然后創(chuàng)建一個AndroidXML資源文件,在其中定義用于生成動畫的圖片資源。<?xmlversion="1.0"encoding="utf-8"?><animation-listxmlns:android="/apk/res/android"><itemandroid:drawable="@drawable/img001"android:duration="100"/><itemandroid:drawable="@drawable/img002"android:duration="100"/><itemandroid:drawable="@drawable/img003"android:duration="100"/><itemandroid:drawable="@drawable/img004"android:duration="100"/><itemandroid:drawable="@drawable/img005"android:duration="100"/><itemandroid:drawable="@drawable/img006"android:duration="100"/></animation-list>逐幀動畫XML屬性說明drawable當前幀引用的drawable資源duration當前幀顯示的時間(毫秒為單位)oneshot如果為true,表示動畫只播放一次停止在最后一幀上,如果設(shè)置為false表示動畫循環(huán)播放。variablePaddingIftrue,allowsthedrawable’spaddingtochangebasedonthecurrentstatethatisselected.visible規(guī)定drawable的初始可見性,默認為flase;(2)使用步驟(1)中定義的動畫資源。(3)在代碼中獲取對象的AnimationDrawable對象,設(shè)置動畫的啟動或停止。逐幀動畫<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:id="@+id/LinearLayout1"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@anim/fairy"android:orientation="vertical"></LinearLayout>//獲取組件對象LinearLayoutll=(LinearLayout)findViewById(R.id.LinearLayout1); //獲取AnimationDrawable對象finalAnimationDrawableanim=(AnimationDrawable)ll.getBackground();//開始播放動畫anim.start();////停止播放動畫//anim.stop();逐幀動畫對使用資源文件處理方式的動畫也可以使用代碼實現(xiàn),這樣就不用定義使用<animation-list></animation-list>標記的資源文件,創(chuàng)建一個AnimationDrawabled對象來表示Frame動畫,然后通過addFrame方法把每一幀要顯示的內(nèi)容添加進去,最后通過調(diào)用AnimationDrawable對象的start方法就可以播放這個動畫了,同時還可以通過setOneShot方法設(shè)置是否重復(fù)播放。//實例化AnimationDrawable對象frameAnimation=newAnimationDrawable();/*裝載資源,用一個循環(huán)裝載所有名字類似的資源*/for(inti=1;i<=15;i++){intid=getResources().getIdentifier("a"+i,"drawable",mContext.getPackageName());mBitAnimation=getResources().getDrawable(id);/*為動畫添加一幀,mBitAnimation是該幀的圖片,參數(shù)500是該幀顯示的時間,按毫秒計算*/frameAnimation.addFrame(mBitAnimation,500);}//設(shè)置播放模式是否循環(huán)播放,false表示循環(huán),true表示不循環(huán)frameAnimation.setOneShot(false);//設(shè)置將要顯示的這個動畫LinearLayoutll=(LinearLayout)findViewById(R.id.LinearLayout1);ll.setBackgroundDrawable(frameAnimation);//其他地方設(shè)置動畫開始(主要不要在view的oncreate方法中使用)frameAnimation.start();逐幀動畫方法描述intgetDuration()獲取動畫的時長intgetNumberOfFrames()獲取動畫的幀數(shù)booleanisOneShot()獲取oneshot屬性VoidsetOneShot(booleanoneshot)設(shè)置oneshot屬性DrawablegetFrame(intindex)獲取某幀的Drawable資源voidaddFrame(Drawableframe,intduration)為當前動畫增加幀(資源,持續(xù)時長)voidstart()開始動畫voidrun()外界不能直接掉調(diào)用,使用start()替代booleanisRunning()當前動畫是否在運行voidstop()停止當前動畫逐幀動畫對于GIF動畫,Android以前并不支持直接播放,從9.0起才開始增加了新的圖像解碼器ImageDecoder,該解碼器支持直接讀取GIF文件的圖形數(shù)據(jù),通過搭配具備動畫特征的圖形工具Animatable,可輕松實現(xiàn)在APP中播放GIF文件if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.P){try{ImageDecoder.Sourcesource=ImageDecoder.createSource(getResources(),R.drawable.gifimage);//從數(shù)據(jù)源中得到GIF圖形數(shù)據(jù)DrawablegifDrawable=ImageDecoder.decodeDrawable(source);//設(shè)置ImageView組件的圖形為GIF對象imageView.setImageDrawable(gifDrawable);//如果時動畫,則開始播放if(gifDrawableinstanceofAnimatable){((Animatable)imageView.getDrawable()).start();}}catch(Exceptione){e.printStackTrace();}}補間動畫就是通過對場景里的對象不斷進行圖像變化來產(chǎn)生動畫效果。在實現(xiàn)補間動畫時,只需要定義動畫開始和結(jié)束的“關(guān)鍵幀”,其它過渡幀由系統(tǒng)自動計算并補齊。在Android中提供了4種補間動畫。Alpha:漸變透明度動畫效果Scale:漸變尺寸伸縮動畫效果Translate:畫面轉(zhuǎn)換位置移動動畫效果Rotate:畫面轉(zhuǎn)換位置移動動畫效果補間動畫屬性[類型]值及功能Duration[long]屬性為動畫持續(xù)時間,時間以毫秒為單位fillAfter[boolean]當設(shè)置為true,該動畫轉(zhuǎn)化在動畫結(jié)束后被應(yīng)用fillBefore[boolean]當設(shè)置為true,該動畫轉(zhuǎn)化在動畫開始前被應(yīng)用interpolator指定一個動畫的插入器,有一些常見的插入器:accelerate_decelerate_interpolator:加速-減速動畫插入器accelerate_interpolator:加速-動畫插入器decelerate_interpolator:減速-動畫插入器repeatCount[int]動畫的重復(fù)次數(shù)repeatMode[String]定義重復(fù)的行為:Restart:重新開始Reverse:倒序startOffset[long]動畫之間的時間間隔,從上次動畫停多少時間開始執(zhí)行下個動畫zAdjustment[int]定義動畫的ZOrder的改變0:保持ZOrder不變1:保持在最上層-1:保持在最下層補間動畫補間動畫透明度漸變動畫Alpha通過組件透明度的變化來實現(xiàn)漸隱漸顯的動畫效果。主要通過為動畫指定開始時的透明度和結(jié)束時的透明度,以及持續(xù)時間來創(chuàng)建動畫。屬性功能參數(shù)說明fromAlpha動畫起始時透明度0.0-1.0之間的float數(shù)據(jù)類型的數(shù)字0:完全透明1:完全不透明toAlpha動畫結(jié)束時透明度<?xmlversion=“1.0”encoding=“utf-8”?><setxmlns:android=“/apk/android”><alphaandroid:fromAlpha=”0.1″android:toAlpha=”1.0″android:duration=”3000″/></set>縮放動畫Scale通過為動畫指定開始時的縮放系數(shù)、結(jié)束時的縮放系數(shù),以及持續(xù)時間來創(chuàng)建動畫,在縮放時還可以通過指定軸心點坐標來改變縮放的中心。補間動畫屬性功能參數(shù)說明fromXScale[float]fromYScale[float]為動畫起始時,X、Y坐標上的伸縮尺寸0.0表示收縮到?jīng)]有1.0表示正常無伸縮值小于1.0表示收縮值大于1.0表示放大toXScale[float]toYScale[float]為動畫結(jié)束時,X、Y坐標上的伸縮尺寸pivotX[float]pivotY[float]為動畫相對于物件的X、Y坐標的開始位置從0%-100%中取值,50%為物件的X或Y方向坐標上的中點位置<?xmlversion=“1.0”encoding=“utf-8”?><setxmlns:android=“/apk/android”><scaleandroid:interpolator=“@android:anim/accelerate_decelerate_interpolator”android:fromXScale=”0.0″android:toXScale=”1.4″android:fromYScale=”0.0″android:toYScale=”1.4″android:pivotX=”50%”android:pivotY=”50%”android:fillAfter=”false”android:startOffset=“700”android:duration=”700″android:repeatCount=”10″/></set>平移動畫Translate通過為動畫指定開始時的位置、結(jié)束時的位置,以及持續(xù)時間來創(chuàng)建動畫。補間動畫屬性功能fromXDeltatoXDelta動畫、結(jié)束起始時X坐標上的位置fromYDeltatoYDelta動畫、結(jié)束起始時Y坐標上的位置<?xmlversion=“1.0”encoding=“utf-8”?><setxmlns:android=“/apk/android”><translateandroid:fromXDelta=”30″android:toXDelta=”-80″android:fromYDelta=”30″android:toYDelta=”300″android:duration=”2000″/></set>旋轉(zhuǎn)動畫Rotate通過為動畫指定開始時的旋轉(zhuǎn)角度、結(jié)束時的旋轉(zhuǎn)角度,以及持續(xù)時間來創(chuàng)建動畫。在旋轉(zhuǎn)時可以通過指定軸心點坐標來改變旋轉(zhuǎn)的中心。補間動畫屬性功能參數(shù)說明fromDegrees為動畫起始時物件的角度角度值可取任意值負數(shù):逆時針旋轉(zhuǎn)正數(shù):順時針旋轉(zhuǎn)(負數(shù)from——to正數(shù):順時針旋轉(zhuǎn))(負數(shù)from——to負數(shù):逆時針旋轉(zhuǎn))(正數(shù)from——to正數(shù):順時針旋轉(zhuǎn))(正數(shù)from——to負數(shù):逆時針旋轉(zhuǎn))toDegrees屬性為動畫結(jié)束時物件旋轉(zhuǎn)的角度可以大于360度pivotXpivotY為動畫相對于物件的X、Y坐標的開始位從0%-100%中取值,50%為物件的X或Y方向坐標上的中點位置<?xmlversion=“1.0”encoding=“utf-8”?><setxmlns:android=“/apk/android”><rotateandroid:interpolator=”@android:anim/accelerate_decelerate_interpolator”android:fromDegrees=”0″android:toDegrees=”+350″android:pivotX=”50%”android:pivotY=”50%”android:duration=”3000″/></set>補間動畫在XML資源文件中定義好動畫后,可使用AnimationUtils.loadAnimation()方法加載動畫對象,然后即可在組件的startAnimation()方法中調(diào)用動畫。//加載動畫設(shè)置FinalAnimationtranslate=AnimationUtils.loadAnimation(this,R.anim.anim_translate);FinalImageViewiv=(ImageView)findViewById(R.id.imageView1);//在其他位置調(diào)用開始動畫iv.startAnimation(translate);Android還提供了動畫基類Animation,其中包含大量的set/getXXXX()函數(shù)來設(shè)置、讀取Animation的屬性,也就是前面表9-7中的各種公共屬性。由Animation派生出4種子動畫類型:AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation分別實現(xiàn)了透明、伸縮、平移、旋轉(zhuǎn)動畫,每個子類都在父類的基礎(chǔ)上增加了各自獨有的屬性。補間動畫集合動畫AnimationSet是Animation的子類,一個AnimationSet包含了一系列的Animation,針對AnimationSet對象設(shè)置一些Animation的常見屬性(如startOffset,duration等),可以被包含在AnimationSet當中的Animation集成。AnimationSetanimationSet=newAnimationSet(true);AlphaAnimationalphaAnimation=newAlphaAnimation(1,0);RotateAnimationrotateAnimation=newRotateAnimation(0,360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);rotateAnimation.setDuration(1000);animationSet.addAnimation(rotateAnimation);animationSet.addAnimation(alphaAnimation);image.startAnimation(animationSet);屬性動畫性動畫ObjectAnimation,允許控件的所有屬性都能實現(xiàn)漸變的動畫效果,例如背景顏色、文字顏色、文字大小等。只要設(shè)定某

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論