2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Android課程講義,---圖形圖像處理,View類開發(fā)框架在View類框架中,任何自定義的View類都只需要重寫onDraw( )方法來進(jìn)行界面的顯示onDraw( )方法不能被直接調(diào)用,想要重新加載界面通常有兩種方法,一種是在Handler中調(diào)用invalidate,另一種是直接在線程中調(diào)用postInvalidate( )invalidate( )不能直接在工作者線程中進(jìn)行調(diào)用,因為它違背了單線程模型,而android的U

2、I操作并不是線程安全的。而postInvalidate()可以在工作者線程中直接進(jìn)行調(diào)用,圖形圖像開發(fā)基礎(chǔ),圖形圖像開發(fā)基礎(chǔ),SurfaceView類開發(fā)框架surfaceView繼承自View類,它通過一個新線程來更新畫面。因此,SurfaceView更適合需要快速加載UI,或渲染代碼阻塞UI線程的時間過長的情形SurfaceView封裝了一個Surface對象,而不是Canvas,這一點(diǎn)對于那些資源敏感的操作特別有用Surfa

3、ceView一般通過使用SurfaceHolder類來控制Canvas在其surface上的操作,SurfaceHolder類可以通過getHolder( )來獲得,圖形圖像處理基礎(chǔ),SurfaceView類開發(fā)框架SurfaceHolder中的幾個重要的方法lockCanvas( )方法用于鎖定畫布,這樣Surface中就可以指定畫布了,之后就可以在畫布上進(jìn)行繪畫unlockCanvasAndPost(Canvas canvas

4、):用于釋放處于鎖定狀態(tài)的Canvas當(dāng)Surface的狀態(tài)發(fā)生改變時,可以通過SurfaceHolder.Callback來獲取這些信息SurfaceHolder.Callback有三個重要的方法,surfaceChanged( )、surfaceCreated( )、surfaceDestroyed( )分別在Surface創(chuàng)建、改變、銷毀時被調(diào)用,Graphics類開發(fā),Paint和Color類畫筆Paint類包含如何繪制幾

5、何形狀、文本和位圖的樣式及顏色信息Paint文本繪制主要包括這些方面,如setColor( )、setTypeface( )、setTextSize( )等Paint圖形圖像繪制主要通過setColor( )、setStyle( )等方法來設(shè)置,Graphics類開發(fā),Paint和Color類顏色被表示為封裝的數(shù)值,這個數(shù)值由四個字節(jié)組成,分別為alpha、red、green、blue,任何透明性只存儲在alpha部分。Colo

6、r類定義了一些方法來創(chuàng)建和轉(zhuǎn)換顏色值。如red( int color)、green(int color)、blue(int color)等方法可以獲取一個顏色常量值的紅綠藍(lán)分色,而HSVToColor( )、RGBToHSV( )等方法可以在不同顏色空間進(jìn)行顏色的轉(zhuǎn)換。,Graphics類開發(fā),Canvas類介紹要實現(xiàn)一個吸引人的游戲,色彩艷麗的界面設(shè)計是必不可少的,這就需要Paint和Canvas配合實現(xiàn)設(shè)置Canvas屬性的常用

7、方法drawColor( ):用來設(shè)置畫布背景色,體現(xiàn)在手機(jī)上就是手機(jī)屏幕背景色clipRect( ):設(shè)置裁剪區(qū)域,即設(shè)置顯示區(qū)域rotate( ):旋轉(zhuǎn)畫布,Graphics類開發(fā),Canvas類介紹Canvas常用的繪制方法drawRect(Rect rect, Paint paint)用于繪制矩形區(qū)域drawBitmap(bitmap bitmap, Rect src, Rect dst, Paint paint)用

8、于繪制位圖drawPoint(float x, float y, Paint paint)用于畫點(diǎn)drawLine(float startX, float startY, float stopX, float stopY, Paint paint)用于畫線drawText(String text, float x, float y, Paint paint)用于在某個位置寫文本,Graphics類開發(fā),繪制圖像Android中顯

9、示圖像主要有兩步,第一步是獲取圖像資源,第二步調(diào)用畫布類的drawBitmap方法進(jìn)行圖像顯示。以SurfacView為框架在屏幕中央顯示一幅圖像如圖示,Graphics類開發(fā),圖像旋轉(zhuǎn)和縮放android中對圖像的變換操作有平移、旋轉(zhuǎn)、縮放和傾斜四種,android內(nèi)的Matrix提供了這四種操作方法Matrix在使用前必須通過reset( )或set( )被初始化。其中對應(yīng)每種操作都有三種接口setXXX, preXXX,po

10、stXXX,在調(diào)用這些操作時都可以指定操作中心setXXX將使當(dāng)前操作覆蓋以前的操作,preXXX和postXXX都是順序疊加操作,區(qū)別在于preXXX是將新變換矩陣左乘原來的操作矩陣,而postXXX是將新變換矩陣右乘原來的操作矩陣,Graphics類開發(fā),圖像旋轉(zhuǎn)和縮放圖像旋轉(zhuǎn)和縮放效果如圖示,Graphics類開發(fā),圖像像素操作對圖像像素進(jìn)行操作主要包括兩個過程,第一步首先從圖像中獲取像素值,第二步對像素值進(jìn)行處理并保存a

11、ndroid中提供了兩套操作方法,這些方法都屬于Bitmap類,第一套方法針對單像素進(jìn)行操作,getPixel( )和setPixel( ),第二套為針對批量像素進(jìn)行操作, getPixels( )和setPixels( ),Graphics類開發(fā),圖像像素操作針對單像素的方法將彩色圖像變換為黑白圖像顯示出來效果如圖示,Graphics類開發(fā),Shader類介紹Shader類來對圖形圖像進(jìn)行渲染Shader類包含了子類Bitmap

12、Shader、LinearGradient、RadialGradient、SweepGradient以及ComposeShaderBitmapShader主要用于渲染圖像,比如使圖像顯示在某種特定形狀邊界內(nèi)LinearGradient用來進(jìn)行線性梯度渲染,比如使繪制的幾何圖形產(chǎn)生一種線性過渡的色彩RadialGradient用于進(jìn)行環(huán)形渲染,比如使圓產(chǎn)生環(huán)形顏色過渡SweepGradient是掃描漸變,即圍繞一個中心點(diǎn)進(jìn)行掃描漸

13、變,類似于雷達(dá)掃描的效果ComposeShader是組合渲染,可以組合上面所述的任意兩種渲染效果,Graphics類開發(fā),雙緩沖技術(shù)在游戲開發(fā)中,當(dāng)一幅動畫在顯示的同時,假如程序又會修改它,這樣前面的畫面還沒有顯示完,程序又要求重新繪制,屏幕就會不停閃爍,為了避免閃爍,就必須使用雙緩沖技術(shù)雙緩沖原理是將要處理的圖片先在內(nèi)存中處理完后,再將其顯示到屏幕上,這樣顯示出來的就是一幅完整的圖像,不會出現(xiàn)閃爍的現(xiàn)象android里實現(xiàn)就是

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

15、youtParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN)實現(xiàn)了狀態(tài)欄的隱藏,Graphics類開發(fā),設(shè)置全屏和獲取屏幕屬性android通過DisplayMetrics類的getWindowManager().getDefaultDisplay().getMetrics()方法來獲取分辨率,用法如下,動畫實現(xiàn),Frame動畫Frame動畫是最常見的一

16、種實現(xiàn)方法,android逐幀動畫通過android.graphics.drawable.AnimationDrawable類來實現(xiàn),在該類中保存了幀序列以及顯示的時間android提供了一種通過XML來創(chuàng)建逐幀動畫的方式,動畫創(chuàng)建所用的XML文件的語法格式如下:,XML文件通過animation-list來指定這是個AnimationDrawable動畫定義,里面的item來指定每幀圖片資源路徑,duration代表當(dāng)前幀顯示的時間

17、,oneshot為true表示動畫只播放一次停止在最后一幀上,如果設(shè)置為false表示動畫循環(huán)播放。下面一個例子通過View顯示一個幀動畫,動畫實現(xiàn),Tween動畫Tween動畫,即通過對場景里面的對象不斷做圖像變換(平移、縮放、旋轉(zhuǎn))來產(chǎn)生動畫效果,由此可見,實現(xiàn)Tween動畫只需要簡單的一幅圖像就可以了,因此對資源的占用是很少的可以以XML文件方式或者源代碼方式預(yù)先為Tween定義一組指令,這些指令指定了圖形變換的類型、觸發(fā)時間

18、、持續(xù)時間等,程序沿著時間線執(zhí)行這些指令就可以實現(xiàn)動畫效果動畫的進(jìn)度使用Interpolator控制,android提供了幾個Interpolator子類LinearInterpolator類可以實現(xiàn)勻速效果Accelerateinterpolator類可以實現(xiàn)加速效果DecelerateInterpolator類可以實現(xiàn)減速效果,動畫實現(xiàn),Tween動畫Tween動畫的兩種運(yùn)行模式獨(dú)占模式,即程序主線程進(jìn)入一個循環(huán),根據(jù)動

19、畫指令不斷刷新屏幕,直到動畫結(jié)束中斷模式,即有單獨(dú)一個線程對時間計數(shù),每隔一定的時間向主線程發(fā)通知,主線程接到通知后更新屏幕動畫播放過程中對圖形的變換通過仿射矩陣實現(xiàn),簡單來說就是,每種變換都是一次矩陣運(yùn)算在android中,Canvas類中包含當(dāng)前矩陣,當(dāng)調(diào)用Canvas.drawBitmap(bmp, x, y, Paint)進(jìn)行繪制時,android會先對bmp做一次矩陣運(yùn)算,然后將運(yùn)算結(jié)果顯示在Canvas上通過不斷修改

20、Canvas的矩陣并刷新屏幕,View內(nèi)的圖形就會不停的做變換,動畫就形成了,動畫實現(xiàn),Tween動畫Tween動畫的核心模塊-Animation類及其子類它實現(xiàn)了各種動畫效果,如平移、縮放、旋轉(zhuǎn)、改變透明度等Tween動畫的每一幀都根據(jù)Interpolator對圖形進(jìn)行一次變換Animation是基類,包含了動畫的通用屬性和方法。主要的屬性包括動畫持續(xù)時間、重復(fù)次數(shù)、interpolator等動畫里最重要的方法是getTra

21、nsformation( ),該方法根據(jù)當(dāng)前時間和interpolator,計算當(dāng)前的變換并返回之TranslateAnimation、RotateAnimation、AlphaAnimation等是Animation的子類,分別實現(xiàn)了平移、旋轉(zhuǎn)、漸變等變換,動畫實現(xiàn),Tween動畫Animation類及其子類繼承關(guān)系圖,動畫實現(xiàn),Tween動畫Tween動畫Animation類及其子類每個Animation子類都重載了父類的a

22、pplyTransformation方法,這個方法會被父類的getTransformation方法調(diào)用不同的變換具有不同的屬性,如RotateAnimation的屬性是起始角度、終止角度和旋轉(zhuǎn)點(diǎn)坐標(biāo),TranslateAnimation的屬性是起始位置和終止位置,而AlphaAnimation的屬性是起始alpha值和終止alpha值,動畫實現(xiàn),Tween動畫Interpolator類及其子類繼承關(guān)系圖,動畫實現(xiàn),Tween動畫T

23、ween動畫Interpolator類及其子類Interpolator類及其子類Interpolator定義了動畫的變化速度,可以實現(xiàn)勻速、正加速、負(fù)加速、無規(guī)則變加速等getInterpolation( )方法用于差值出一個時間線上的點(diǎn),用于計算圖形變換矩陣LinearInerpolator、AccelerateInterpolator, DecelerateInterpolator,AccelerateDecelerateIn

24、terpolator,CycleInterpolator 是 Interpolator的子類,分別實現(xiàn)了勻速、加速、減速、變速、循環(huán)等效果LinearInterpolator,變化率是常數(shù),即f(x)=x對于AccelerateDecelerateInterpolator,變化率開始和結(jié)束都很慢,但中間很快,即f(x)=(cos(x+1)*PI)/2.0f)+0.5f,動畫實現(xiàn),Tween動畫Tween動畫Transformati

25、on類Transformation類記錄了仿射矩陣,動畫每觸發(fā)一次,會對原來的矩陣做一次運(yùn)算,圖形的Bitmap與這個矩陣相乘就可以實現(xiàn)相應(yīng)的操作(旋轉(zhuǎn)、平移、縮放等)Transformation類有兩個重要的成員,一個是mMatrix,另一個是mAlpha,動畫實現(xiàn),Tween動畫View中實現(xiàn)Tween動畫創(chuàng)建動畫對象,這里是打開一幅圖像,調(diào)用startAnimation( )啟動動畫,在此例中當(dāng)按上、下、左、右鍵時分別啟動

26、漸變、伸縮、平移和旋轉(zhuǎn)動畫startAnimation( )中調(diào)用了invalidate( ),從而觸發(fā)onDraw函數(shù)onDraw函數(shù)中的執(zhí)行過程調(diào)用動畫的getTransformation方法,獲取根據(jù)當(dāng)前時間和Interpolator計算的矩陣將該矩陣設(shè)置為Canvas的當(dāng)前矩陣調(diào)用Canvas的drawBitmap方法繪制屏幕判斷getTransformation的返回值,若為true,則調(diào)用invalidate方法

27、,刷新屏幕進(jìn)入下一幀,否則說明動畫播放結(jié)束,動畫實現(xiàn),Tween動畫Tween動畫XML文件進(jìn)行控制實現(xiàn)在res下新建子目錄anim,然后在該子目錄下創(chuàng)建兩個XML文件如下,動畫實現(xiàn),Tween動畫自定義Animation子類Android內(nèi)提供的動畫接口畢竟有限,如果想實現(xiàn)特殊的動畫效果,則需要自定義Animation子類自定義子類只需要繼承基類并實現(xiàn)applyTransformation( )方法即可,動畫實現(xiàn),gif動畫

28、播放由于差值生成各種中間變換的原因,通過Tween生成的動畫有時候在播放時并不流暢,而gif動畫的播放效果卻可以與flash的效果相媲美,如果在自己的游戲中添加一個gif動畫,則可以使自己的游戲程序更加吸引用戶Android中提供了一個類:android.graphics.Movie可以用于播放gif,它的使用比較簡單使用openRawResource( )方法將gif資源打開,獲得輸入流調(diào)用Movie的decodeStream

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論