課件07圖形與圖像處理_第1頁
課件07圖形與圖像處理_第2頁
課件07圖形與圖像處理_第3頁
課件07圖形與圖像處理_第4頁
課件07圖形與圖像處理_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Android圖形與圖像處理浙大軟件學院梁秀波 Android圖形圖像處理概述 使用簡單圖片 繪圖 圖形特效處理 動畫 Frame動畫 Tween動畫主要內(nèi)容Android的圖形處理能力非常強大對于2D圖形的處理,沒有使用Java中的圖形處理類(在java.awt包中,如Graphics、Canvas等類),而是重新進行了設計。android.graphicsandroid.graphics.drawableandroid.graphics.drawable.shapesandroid.view.animation對于3D圖形處理,采用了OpenGL技術。主要的類位于:android.open

2、glAndroid圖形圖像處理概述Android圖形處理主要包括兩大類:靜態(tài)圖形處理(已經(jīng)擁有了這些圖片)。一般將這些圖形文件作為資源文件添加到項目中即可。然后通過各種Drawable類來處理。動態(tài)圖形處理。需要用代碼不停的繪制。涉及到畫布Canvas, 畫筆Paint等類。Android圖形圖像處理概述 Drawable、Bitmap、Canvas和Paint概念區(qū)別 Bitmap - 稱作位圖,一般位圖的文件格式后綴為bmp、JPG、GIF等。作為一種逐像素的顯示對象執(zhí)行效率高,但是缺點也很明顯,存儲效率低,可理解為一種存儲對象。 Drawable - 作為Android平臺下通用的圖形對

3、象,它可以裝載常用格式的圖像,比如GIF、PNG、JPG,當然也支持BMP,還提供一些高級的可視化對象,比如漸變、圖形等。 Canvas - 名為畫布,可以看作是一種處理過程,使用各種方法來管理Bitmap、Path等,同時它可以配合Matrix矩陣類給圖像做旋轉、縮放等操作,同時Canvas類還提供了裁剪、選取等操作。 Paint - 我們可以把它看做一個畫圖工具,比如畫筆、畫刷。他管理了每個畫圖工具的字體、顏色、樣式。Android圖形圖像處理概述View類開發(fā)框架在View類框架中,任何自定義的View類都只需要重寫onDraw( )方法來進行界面的顯示onDraw( )方法不能被直接調(diào)

4、用,想要重新加載界面通常有兩種方法,一種是在Handler中調(diào)用invalidate,另一種是直接在線程中調(diào)用postInvalidate( )invalidate( )不能直接在工作者線程中進行調(diào)用,因為它違背了單線程模型,而android的UI操作并不是線程安全的。而postInvalidate()可以在工作者線程中直接進行調(diào)用Android圖形圖像處理概述 SurfaceView類開發(fā)框架surfaceView繼承自View類,它通過一個新線程來更新畫面。因此,SurfaceView更適合需要快速加載UI,或渲染代碼阻塞UI線程的時間過長的情形SurfaceView封裝了一個Surfac

5、e對象,而不是Canvas,這一點對于那些資源敏感的操作特別有用SurfaceView一般通過使用SurfaceHolder類來控制Canvas在其surface上的操作,SurfaceHolder類可以通過getHolder( )來獲得Android圖形圖像處理概述SurfaceView類開發(fā)框架SurfaceHolder中的幾個重要的方法lockCanvas( )方法用于鎖定畫布,這樣Surface中就可以指定畫布了,之后就可以在畫布上進行繪畫unlockCanvasAndPost(Canvas canvas):用于釋放處于鎖定狀態(tài)的Canvas當Surface的狀態(tài)發(fā)生改變時,可以通過S

6、urfaceHolder.Callback來獲取這些信息SurfaceHolder.Callback有三個重要的方法,surfaceChanged( )、surfaceCreated( )、surfaceDestroyed( )分別在Surface創(chuàng)建、改變、銷毀時被調(diào)用Graphics類開發(fā) Paint和Color類畫筆Paint類包含如何繪制幾何形狀、文本和位圖的樣式及顏色信息Paint文本繪制主要包括這些方面,如setColor( )、setTypeface( )、setTextSize( )等Paint圖形圖像繪制主要通過setColor( )、setStyle( )等方法來設置Gra

7、phics類開發(fā) Paint和Color類顏色被表示為封裝的數(shù)值,這個數(shù)值由四個字節(jié)組成,分別為alpha、red、green、blue,任何透明性只存儲在alpha部分。Color類定義了一些方法來創(chuàng)建和轉換顏色值。如red( int color)、green(int color)、blue(int color)等方法可以獲取一個顏色常量值的紅綠藍分色,而HSVToColor( )、RGBToHSV( )等方法可以在不同顏色空間進行顏色的轉換。Graphics類開發(fā) Canvas類介紹要實現(xiàn)一個吸引人的游戲,色彩艷麗的界面設計是必不可少的,這就需要Paint和Canvas配合實現(xiàn)設置Canv

8、as屬性的常用方法drawColor( ):用來設置畫布背景色,體現(xiàn)在手機上就是手機屏幕背景色clipRect( ):設置裁剪區(qū)域,即設置顯示區(qū)域rotate( ):旋轉畫布Graphics類開發(fā) Canvas類介紹Canvas常用的繪制方法drawRect(Rect rect, Paint paint)用于繪制矩形區(qū)域drawBitmap(bitmap bitmap, Rect src, Rect dst, Paint paint)用于繪制位圖drawPoint(float x, float y, Paint paint)用于畫點drawLine(float startX, float st

9、artY, float stopX, float stopY, Paint paint)用于畫線drawText(String text, float x, float y, Paint paint)用于在某個位置寫文本Graphics類開發(fā) 繪制圖像Android中顯示圖像主要有兩步,第一步是獲取圖像資源,第二步調(diào)用畫布類的drawBitmap方法進行圖像顯示。以SurfacView為框架在屏幕中央顯示一幅圖像如圖示Graphics類開發(fā) 圖像旋轉和縮放android中對圖像的變換操作有平移、旋轉、縮放和傾斜四種,android內(nèi)的Matrix提供了這四種操作方法Matrix在使用前必須通過

10、reset( )或set( )被初始化。其中對應每種操作都有三種接口setXXX, preXXX,postXXX,在調(diào)用這些操作時都可以指定操作中心setXXX將使當前操作覆蓋以前的操作,preXXX和postXXX都是順序疊加操作,區(qū)別在于preXXX是將新變換矩陣左乘原來的操作矩陣,而postXXX是將新變換矩陣右乘原來的操作矩陣Graphics類開發(fā) 圖像旋轉和縮放圖像旋轉和縮放效果如圖示Graphics類開發(fā) 圖像像素操作對圖像像素進行操作主要包括兩個過程,第一步首先從圖像中獲取像素值,第二步對像素值進行處理并保存android中提供了兩套操作方法,這些方法都屬于Bitmap類,第一套

11、方法針對單像素進行操作,getPixel( )和setPixel( ),第二套為針對批量像素進行操作, getPixels( )和setPixels( )Graphics類開發(fā) 圖像像素操作針對單像素的方法將彩色圖像變換為黑白圖像顯示出來效果如圖示 Graphics類開發(fā) Shader類介紹Shader類來對圖形圖像進行渲染Shader類包含了子類BitmapShader、LinearGradient、RadialGradient、SweepGradient以及ComposeShaderBitmapShader主要用于渲染圖像,比如使圖像顯示在某種特定形狀邊界內(nèi)LinearGradient用來

12、進行線性梯度渲染,比如使繪制的幾何圖形產(chǎn)生一種線性過渡的色彩RadialGradient用于進行環(huán)形渲染,比如使圓產(chǎn)生環(huán)形顏色過渡SweepGradient是掃描漸變,即圍繞一個中心點進行掃描漸變,類似于雷達掃描的效果ComposeShader是組合渲染,可以組合上面所述的任意兩種渲染效果Graphics類開發(fā) 雙緩沖技術在游戲開發(fā)中,當一幅動畫在顯示的同時,假如程序又會修改它,這樣前面的畫面還沒有顯示完,程序又要求重新繪制,屏幕就會不停閃爍,為了避免閃爍,就必須使用雙緩沖技術雙緩沖原理是將要處理的圖片先在內(nèi)存中處理完后,再將其顯示到屏幕上,這樣顯示出來的就是一幅完整的圖像,不會出現(xiàn)閃爍的現(xiàn)象

13、android里實現(xiàn)就是在內(nèi)存中創(chuàng)建一個與原圖大小相同的模擬畫布,先將要處理的圖像畫在模擬畫布上,當全部處理結束后,再將整幅圖顯示在真正的畫布上Graphics類開發(fā) 設置全屏和獲取屏幕屬性 全屏顯示,就是將手機上面的電池、信號顯示所處的狀態(tài)欄以及顯示程序名稱的標題欄隱藏起來 requestWindowsFeature(Window.FEATURE_NO_TITLE)可以實現(xiàn)隱藏標題欄 getWindows.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN

14、)實現(xiàn)了狀態(tài)欄的隱藏Graphics類開發(fā) 設置全屏和獲取屏幕屬性android通過DisplayMetrics類的getWindowManager().getDefaultDisplay().getMetrics()方法來獲取分辨率,用法如下DisplayMetrics dm = new DisplayMetrics() getWindowManager().getDefaultDisplay().getMetrics(dm) 使用Drawable對象 Bitmap和BitmapFactory使用簡單圖片產(chǎn)生圖片資源:將圖片文件拷到res/drawable下。訪問圖片資源(在第六章學習過):

15、在xml中 drawable/文件名在代碼中R.drawable.文件名使用Drawable對象 Android SDK提供了一個強大的Drawable類 SDK的android.graphics.drawable包下面可以看到繼承 Drawable類多達十幾種。 Direct Subclasses:BitmapDrawable, ClipDrawable, ColorDrawable, DrawableContainer, GradientDrawable, InsetDrawable, LayerDrawable, NinePatchDrawable, PictureDrawable, R

16、otateDrawable, ScaleDrawable, ShapeDrawable Indirect Subclasses :AnimationDrawable, LevelListDrawable, PaintDrawable, StateListDrawable, TransitionDrawable 使用Drawable對象 Drawable就是一個可畫的對象,其可能是一張位圖(BitmapDrawable),也可能是一個圖形(ShapeDrawable),還有可能是一個圖層(LayerDrawable),我們根據(jù)畫圖的需求,創(chuàng)建相應的可畫對象,就可以將這個可畫對象當作一塊“畫布(C

17、anvas)”,在其上面操作可畫對象,并最終將這種可畫對象顯示在畫布上,有點類似于“內(nèi)存畫布“。使用Drawable對象 ImageView組件顯示圖片的方法: void setImageResource(int resId) :Sets a drawable as the content of this ImageView void setImageDrawable(Drawable drawable) :Sets a drawable as the content of this ImageView void setImageBitmap(Bitmap bm) :Sets a Bitmap

18、 as the content of this ImageView.Bitmap和BitmapFactoryBitmap和BitmapFactory創(chuàng)建Bitmap對象方法: BitmapFactory(android.graphics.BitmapFactory):一個工具類,提供了多種方法,這些方法可用于從不同的數(shù)據(jù)源來解析、創(chuàng)建 Bitmap對象。主要方法如下:static Bitmap decodeByteArray(byte data, int offset, int length) : 從指定字節(jié)數(shù)組的從指定字節(jié)數(shù)組的offset位置開始、將長度為位置開始、將長度為length的數(shù)

19、的數(shù)據(jù)解析、創(chuàng)建據(jù)解析、創(chuàng)建Bitmap對象對象static Bitmap decodeFile(String pathName) :指定文件中中解析、創(chuàng)建指定文件中中解析、創(chuàng)建Bitmap對象對象static Bitmap decodeFileDescriptor(FileDescriptor fd) :用于從用于從FileDescriptor對應的文件中解析、創(chuàng)建對應的文件中解析、創(chuàng)建Bitmap對象對象static Bitmap decodeResource(Resources res, int id) :用于根據(jù)給定用于根據(jù)給定的資源的資源ID從指定資源中解析、創(chuàng)建從指定資源中解析、創(chuàng)

20、建Bitmap對象對象static Bitmap decodeStream(InputStream is) :從指定輸出流中解析、從指定輸出流中解析、創(chuàng)建創(chuàng)建Bitmap對象對象Bitmap和BitmapFactory 回收Bitmap對象方法: 系統(tǒng)不停地解析、創(chuàng)建對象,可能由于前面創(chuàng)建的Bitmap所占用內(nèi)存還沒有回收,而導致程序運行時引發(fā)OutOfMemory錯誤。 Android為Bitmap提供了兩個方法來判斷它是否已回收,以及強制Bitmap回收自己。 Boolean isRecycled():返回該 Bitmap對象是否已回收 Void recycle():強制一個Bitmap對

21、象回收自己Bitmap和BitmapFactory 項目實例演示: BitmapTest 代碼分析 BitmapDrawable類:位圖對象 繼承Drawable類 BitmapDrawable里封裝的圖片就是一個Bitmap對象 bitmapDrawable.getBitmap():返回一個Bitmap對象Bitmap和BitmapFactory Bitmap(android.graphics.Bitmap)提供的創(chuàng)建新的Bitmap方法: static Bitmap createBitmap(Bitmap source, int x, int y, int width, int heigh

22、t) :從源位圖source的指定左邊點(x,y)開始,從中挖取一塊出來,創(chuàng)建新的Bitmap對象. static Bitmap createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter) :對源位圖進行縮放,縮放成寬dstWidth,高dstHeight的新位圖。filter如果為true,源圖要被過濾。 static createBitmap(int width,int height,Bitmap.Config config):創(chuàng)建一個寬width、高height的新位圖。 static Bitma

23、p createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) :從源位圖source的指定左邊點(x,y)開始,從中挖取一塊出來,創(chuàng)建新的Bitmap對象.并按Matrix指定的規(guī)則進行變換。 Android繪圖基礎:Canvas、Paint Path類 繪制游戲動畫繪圖Android繪圖基礎:Canvas、Paint Canvas提供的圖形變換方法 rotate(float degrees,float px,float py):對Canvas執(zhí)行旋轉 scale(flo

24、at sx,float sy,float px,float py):對Canvas執(zhí)行縮放 skew(float sx,float sy):對Canvas執(zhí)行傾斜變化。 translate(float dx,float dy):移動Canvas。向右移動dx距離(dx為負數(shù)即向左移動);向下移動dy距離(dy為負數(shù)即向上移動) Canvas上的畫筆:Paint Paint類主要用于設置繪制風格,包括畫筆顏色、畫筆筆觸粗細、填充風格。Android繪圖基礎:Canvas、Paint 項目實例:CanvasTest 自定義View組件,重寫onDraw(Canvas canvas)方法,繪制基本的

25、集合圖形 代碼分析 Path類:下節(jié)詳細介紹 LinearGradient():Android繪圖基礎:Canvas、PaintCanvastTest:代碼分析LinearGradient (float x0, float y0, float x1, float y1, int colors, float positions, Shader.TileMode tile) 包名:android.graphics.LinearGradient,線性漸變渲染基類:Shader類 x0, y0:漸變起點坐標x,y位置 X1,y1:漸變終點坐標x,y位置 Colors:colors數(shù)組中存放沿著漸變線變

26、化的多種顏色Positions:如果為null 就沿坡度線均勻分布Tile:渲染模式CLAMP:MIRROR:REPEAT:Android繪圖基礎:Canvas、Paint 預先在View上將N個點連接成一條“路徑”,然后調(diào)用Canvas的drawPath(path,paint)即可沿著該路徑路徑繪制圖形。 提供PathEffect定義繪制效果,有如下子類: CornerPathEffect DashPathEffect DiscretePathEffect PathDashPathEffect SumPathEffect ComposePathEffectPath類項目實例演示PathTes

27、tPath類項目實例(PathTest)代碼分析PathEffect是用來控制繪制輪廓(線條)的方式。使用PathEffect,可以改變一個形狀的邊角的外觀并且控制輪廓的外表。Path類項目實例(PathTest)代碼分析CornerPathEffect (float radius) 可以使用圓角來代替尖銳的角從而對基本圖形的形狀尖銳的邊角進行平滑。Radius:圓角半徑Path類項目實例(PathTest)代碼分析DashPathEffect(float intervals, float phase) :創(chuàng)建一個虛線的輪廓(短橫線/小圓點),而不是使用實線??梢灾付ㄈ我獾奶?實線段的重復模式

28、。intervals:表示虛線線段的長度和虛線之間的間隔。數(shù)組長度必須是偶數(shù)。例如new float10,4,6,3。這四個值分別表示長線段的長度(10),長線段與短線段之間的距離是4,短線段的長度是6,短線段與長線段之間的舉例是3。phase:該參數(shù)用于指定路徑效果的相位,當該參數(shù)不斷改變時,繪制效果也略有變化。形成動畫效果。(演示當phase=0時的情況)Path類項目實例(PathTest)代碼分析DiscretePathEffect(float segmentLength, float deviation) :與DashPathEffect相似,但是添加了隨機性。當繪制它的時候,需要指

29、定每一段的長度和與原始路徑的偏離度。Chop the path into lines of segmentLength, randomly deviating from the original path by deviation.(將路徑劃分成指定長度的線段,然后把每條線段隨機偏移原來的位置。)Path類項目實例(PathTest)代碼分析PathDashPathEffect (Path shape, float advance, float phase, PathDashPathEffect.Style style) :shape :用于繪制虛線對象的Path對象advance:兩個虛線圖

30、形之間的距離phase:繪制路徑的偏移量。如果該參數(shù)不斷增大會減少,會出現(xiàn)路徑向前或向后移動的效果style:表示如何在路徑的不同位置放置 Shape所繪制的圖形Path類項目實例(PathTest)代碼分析SumPathEffect(PathEffect first, PathEffect second) : 順序地在一條路徑中添加兩種效果,這樣每一種效果都可以應用到原始路徑中,而且兩種結果可以結合起來。Path類項目實例(PathTest)代碼分析ComposePathEffect(PathEffect outerpe, PathEffect innerpe):將兩種效果組合起來應用,先使

31、用第一種效果,然后在這種效果的基礎上應用第二種效果。Path類項目實例2:PathText代碼分析drawTextOnPath(String text,Path path,float hOffset,float vOffset,Paint paint)hOffset:水平偏移量vOffset:垂直偏移量Path類采用雙緩沖實現(xiàn)畫圖板:項目實例1:本實例實現(xiàn)一個畫圖板,當用戶在觸摸屏上移動時,即可在屏幕上繪制任意的圖形。HandDraw項目實例2:本實例開了一個簡單的彈球游戲,其中小球和球拍分別以圓形區(qū)域和矩形區(qū)域代代替,小球開始以隨機速度向下運動,遇到邊框或球拍時小球反彈;球拍則由用戶控制,當

32、用戶按下向左、右鍵時,球拍將會向左右移動。PinBall繪制游戲動畫 使用Matrix控制變換 使用drawBitmapMesh扭曲圖像 使用Shader填充圖形圖形特效處理 Matrix是Android提供的一個矩陣工具類,它本身并不能對圖像或組件進行變換(平移、旋轉、縮放、傾斜),但它可與其他API結合起來控制圖形、組件的變換。使用Matrix控制變換使用Matrix控制圖像或組件變換的步驟如下:獲取Matrix對象,該Matrix對象既可新創(chuàng)建,也可直接獲取其他對象內(nèi)封裝的Matrix;調(diào)用Matrix的方法進行平移、旋轉、縮放、傾斜等;將程序對Matrix所做的變換應用到指定圖像或組件

33、。使用Matrix控制變換 Matrix提供方法如下: setTranslate(float dx,float dy):控制Matrix坐標平移dx,dy;使用Matrix控制變換 Matrix提供方法如下: setSkew(float kx,float ky):控制Matrix進行傾斜。Kx,ky為X,Y方向上的傾斜距離 setSkew(float kx,float ky,float px,float py):控制Matrix以px,py為軸心進行傾斜。使用Matrix控制變換 Matrix提供方法如下: setRotate(float degrees):控制Matrix進行旋轉,degre

34、es為控制旋轉的角度。 setRotate(float degrees,float px,float py):控制Matrix以px,py為軸心進行旋轉.使用Matrix控制變換 Matrix提供方法如下: setScale(float sx,float sy):設置Matrix進行縮放,sx,xy控制 X,Y方向上的縮放比例。 setScale(float sx,float sy,float px,float py):設置Matrix以px,py為軸心進行縮放。使用Matrix控制變換 Android通過drawBitmapMesh扭曲圖像提供“ 水波蕩漾”、“風吹旗幟”效果。使用drawB

35、itmapMesh扭曲圖像drawBitmapMesh方法相關參數(shù)說明:bitmap:指定需要扭曲的源位圖meshWidth:該參數(shù)控制在橫向方向上把該源位圖分成多少格meshHeight:該參數(shù)控制在縱向方向上把該源位圖分成多少格verts:該參數(shù)是一個長度( meshWidth +1)*( meshHeight +1)*2的數(shù)組,它記錄了扭曲后的位圖各“頂點”(網(wǎng)格線交點)位置。雖然它是一個一維數(shù)組,實際上記錄的是(x0,y0) (x1,y1) (x2,y2).格式的數(shù)據(jù),這些數(shù)組元素控制對bitmap位圖的扭曲vertOffset:控制verts數(shù)組中從第幾個數(shù)組元素開始才對bitmap

36、進行扭曲。使用drawBitmapMesh扭曲圖像 項目實例演示: 當用戶“觸摸”圖片指定點時,該圖片會在這個點被用戶“按下去”就像這張圖片鋪在“極軟的床上”。 MestTest使用drawBitmapMesh扭曲圖像 項目實例演示: 當用戶“觸摸”圖片指定點時,該圖片會在這個點被用戶“按下去”就像這張圖片鋪在“極軟的床上”。 MestTest使用drawBitmapMesh扭曲圖像 項目實例代碼分析: 為了實現(xiàn)這個效果,程序要在用戶觸摸圖片的指定點時,動態(tài)地改變verts數(shù)組里每個元素的位置(控制扭曲后每個頂點的坐標) 程序計算圖片上每個頂點與觸摸點的距離,頂點與觸摸點的距離越小,該頂點向觸

37、摸點移動的距離越大。使用drawBitmapMesh扭曲圖像Android中提供了Shader類專門用來渲染圖像以及一些幾何圖形,Shader下面包括幾個直接子類:BitmapShader:實現(xiàn)位圖平鋪的渲染效果使用Shader填充圖形Android中提供了Shader類專門用來渲染圖像以及一些幾何圖形,Shader下面包括幾個直接子類:LinearGradient :使用線性漸變來填充圖形。使用Shader填充圖形Android中提供了Shader類專門用來渲染圖像以及一些幾何圖形,Shader下面包括幾個直接子類:RadialGradient :使用圓性漸變來填充圖形使用Shader填充圖

38、形Android中提供了Shader類專門用來渲染圖像以及一些幾何圖形,Shader下面包括幾個直接子類:SweepGradient :使用角度漸變來填充圖形使用Shader填充圖形Android中提供了Shader類專門用來渲染圖像以及一些幾何圖形,Shader下面包括幾個直接子類:ComposeShader:則是一個 混合渲染,可以和其它幾個子類組合起來使用。使用Shader填充圖形兩種動畫實現(xiàn)方式:逐幀動畫-Frame。按照時間的先后順序,一次播放排列好的圖片。類似于放電影補間動畫-Tween。通過對場景里的對象不斷做圖像變換(平移、縮放、旋轉)產(chǎn)生動畫效果動畫動畫資源文件介紹:/res

39、/anim/*.xml:資源文件中使用元素中使用子元素定義動畫的全部幀,并指定各幀的持續(xù)時間。逐幀動畫使用ImageView 顯示動畫:逐幀動畫使用AnimationDrawable控制動畫播放和停止:final AnimationDrawable anim = (AnimationDrawable)imageView.getBackground();anim.start();anim.stop();逐幀動畫項目實例1演示FatPo(codes/07/7.4)在XML文件中定義動畫資源文件:逐幀動畫項目實例2演示:爆炸場景(codes/07/7.4/Blast)Blast代碼分析:需要指出的是

40、下面的方法對于該程序并不是必要的即使刪除該程序也是正常的,但這只是恰好因為爆炸效果的最后一幀是空白的。如果最后一幀不是空白的,而程序又沒有隱藏ImageView,用戶將會看到動畫效果依然殘留在那里。于是就需要借助下面的方法:逐幀動畫開發(fā)者只需要指定動畫開始、動畫結束“關鍵幀”,而動畫變化的“中間幀”由系統(tǒng)計算、并補齊,這也就是把 “Tween”翻譯成“補間動畫”的原因具體來說,預先定義一組指令,這些指令指定了圖形變換的類型、觸發(fā)時間、持續(xù)時間。這些指令可以是XML文件定義,也可以以源代碼方式定義。程序沿著時間執(zhí)行這些指令就可以實現(xiàn)動畫。補間動畫Tween動畫定義的開始幀、結束幀其實只是一些簡單

41、的變化,比如圖形大小的縮放、旋轉角度的改變等。Android使用Animation代表抽象的動畫類,它包括如下幾個子類:AlphaAnimation 漸變透明度動畫效果 ScaleAnimation 漸變尺寸伸縮動畫效果 TranslateAnimation 畫面轉換位置移動動畫效果 RotateAnimation 畫面轉移旋轉動畫效果補間動畫補間動畫為了控制在動畫期間需要動態(tài)“補入”多少幀,具體在動畫運行的哪些時刻補入幀、需要借助Interpolator(數(shù)學中的插值)Interpolator根據(jù)特定算法計算出整個動畫需要動態(tài)插入幀的密度和位置,簡單地說,Interpolator負責控制動畫

42、的變化速度,這就使得基本的動畫效果(Alpha、Scale、Translate、Rotate)能以勻速變化、加速、減速、拋物線速度等各種速度變化補間動畫 Interpolator是一個接口,它定義了所有Interpolator都需要實現(xiàn)的方法:float getInterpolation(float input),開發(fā)者可以通過實現(xiàn)Interpolator來控制動畫的變化速度。 Android提供了如下幾個實現(xiàn)類: LinearInterpolator:動畫以均勻的速度改變 AccelerateInterpolator:在動畫開始的地方改變速度較慢,然后開始加速 AccelerateDecelerateInterpolator:在動畫開始

溫馨提示

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

評論

0/150

提交評論