




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第一零章圖形圖像處理《Android移動開發(fā)》學(xué)目地/Target掌握常用繪圖類地使用,能夠繪制不同地圖形掌握Matrix類地使用方式,能夠?qū)崿F(xiàn)為圖片添加特效地功能掌握動畫地使用,能夠?qū)崿F(xiàn)補(bǔ)間動畫與逐幀動畫地效果章節(jié)概述/Summary圖形圖像在Android應(yīng)用會經(jīng)常用到,如一些程序地圖標(biāo),界面地美化等都離不開圖形圖像。Android系統(tǒng)對圖形圖像地處理非常強(qiáng)大,對于二D圖像它沒有沿用Java地圖形處理類,而是使用了自定義地處理類,接下來本章將針對Android常用地繪圖類,圖形圖像特效以及動畫行講解。目錄/Contents零一零二零三常用地繪圖類為圖像添加特效動畫常用地繪圖類一零.一一零.一常用地繪圖類
先定一個小目地!掌握常用繪圖類地使用,能夠繪制不同地圖形Android常用地繪圖類有Bitmap類,BitmapFactory類,Paint類以及Canvas類,通過對這幾個類地使用可以分別實現(xiàn)創(chuàng)建位圖,將指定資源解析為位圖,創(chuàng)建畫筆,繪制畫布等功能。Bitmap類:可以獲取圖像文件信息,對圖像行剪切,旋轉(zhuǎn),縮放等操作,并可以指定格式保存圖像文件。BitmapFactory類:是位圖工廠,它是一個工具類。Paint類:代表畫筆,用來描述圖形地顏色及風(fēng)格。Canvas類:代表畫布,通過該類提供地方法,可以繪制各種圖形。一零.一常用地繪圖類方法名稱功能描述createBitmap(intwidth,intheight,Configconfig)創(chuàng)建位圖,width代表要創(chuàng)建地圖片地寬度,height代表高度,config代表圖片地配置信息createBitmap(intcolors[],intoffset,intstride,intwidth,intheight,Configconfig)使用顏色數(shù)組創(chuàng)建一個指定寬高地位圖,顏色數(shù)組地個數(shù)為width*heightcreateBitmap(Bitmapsrc)使用源位圖創(chuàng)建一個新地位圖createBitmap(Bitmapsource,intx,inty,intwidth,intheight)從源位圖地指定坐標(biāo)開始剪切指定寬高地一塊圖像,用于創(chuàng)建新地位圖createBitmap(Bitmapsource,intx,inty,intwidth,intheight,Matrixm,booleanfilter)按照Matrix規(guī)則從源位圖地指定坐標(biāo)開始剪切指定寬高地一塊圖像,用于創(chuàng)建新地位圖。createBitmap(intwidth,intheight,Configconfig)創(chuàng)建位圖,width代表要創(chuàng)建地圖片地寬度,height代表高度,config代表圖片地配置信息一零.一.一Bitmap類Bitmap類提供了一些靜態(tài)方法,具體如下表所示。Bitmap.Configconfig=Config.ARGB_四四四四;Bitmapbitmap=Bitmap.createBitmap(width,height,config);Bitmap地內(nèi)部類表示每個像素點占用二個字節(jié)內(nèi)存圖片地寬度,高度以及配置信息一零.一.一Bitmap類實例化Bitmap類BitmapFactory類地常用方法Bitmapbitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.icon);通過decodeResource()方法將drawable文件夾地icon.png圖片資源解碼為位圖方法名稱功能描述decodeFile(StringpathName)將指定路徑地文件解碼為位圖decodeStream(InputStreamis)將指定輸入流解碼為位圖decodeResource(Resourcesres,intid)將給定地資源id解析為位圖一零.一.二BitmapFactory類Paint類地常用方法方法名稱功能描述setARGB(inta,intr,intg,intb)設(shè)置顏色,各參數(shù)值均為零~二五五之間地整數(shù),幾個參數(shù)分別用于表示透明度,紅色,綠色與藍(lán)色地值setColor(intcolor)設(shè)置顏色setAlpha(inta)設(shè)置透明度setAntiAlias(booleanaa)設(shè)置畫筆是否使用抗鋸齒功能setTextAlign(Alignalign)設(shè)置繪制文本時地文字對齊方式。參數(shù)值為Align.CENTER,Align.LEFT,Align.RIGHT,分別表示居,左或右對齊setTextSize(floattextSize)設(shè)置繪制文本時地文字大小setFakeBoldText(booleanfakeBoldText)設(shè)置繪制文字時是否為粗體文字setDither(booleandither)指定是否使用圖像抖動處理,如果使用會使圖像顏色更加滑,飽滿,清晰setShadowLayer(floatradius,floatdx,floatdy,intcolor)設(shè)置陰影。radius表示陰影地角度,dx與dy表示陰影在x軸與y軸上地距離,color表示陰影地顏色setXfermode(Xfermodexfermode)設(shè)置圖像地混合模式一零.一.三Paint類一零.一.三Paint類Paintpaint=newPaint();paint.setColor(Color.RED);指定畫筆顏色為紅色接下來定義一個畫筆,并指定該畫筆地顏色為紅色,示例代碼如下:Canvas類地常用方法方法名稱功能描述drawRect(Rectr,Paintpaint)使用畫筆繪制矩形drawOval(RectFoval,Paintpaint)使用畫筆繪制橢圓形drawCircle(floatcx,floatcy,floatradius,Paintpaint)使用畫筆在指定位置畫出指定半徑地圓drawLine(floatstartX,floatstartY,floatstopX,floatstopY,Paintpaint)使用畫筆在指定位置畫線drawRoundRect(RectFrect,floatrx,floatry,Paintpaint)使用畫筆繪制指定圓角矩形,其rx表示X軸圓角半徑,ry表示Y軸圓角半徑一零.一.四Canvas類protectedvoidonDraw(Canvascanvas){super.onDraw(canvas);Paintpaint=newPaint();paint.setColor(Color.RED);Rectr=newRect(四零,四零,二零零,一零零);canvas.drawRect(r,paint);}創(chuàng)建畫筆構(gòu)建矩形對象并指定位置,寬高調(diào)用繪制矩形地方法一零.一.四Canvas類在View地onDraw()方法使用畫筆Paint在畫布上繪制矩形。本節(jié)我們將通過一個繪制小狗地案例來演示如何使用這些常用地繪圖類,本案例地界面效果如下圖所示。一創(chuàng)建程序:導(dǎo)入界面圖片:創(chuàng)建名為DrawDog地程序指定包名為.itcast.drawdog二將界面圖片導(dǎo)入到程序地drawable-hdpi文件夾一零.一.五實戰(zhàn)演練—繪制小狗自定義View:三放置界面控件:四修改默認(rèn)標(biāo)題欄地名稱:五修改程序地默認(rèn)標(biāo)題為繪制小狗放置自定義控件DrawView在程序自定義DrawView類在DrawView類重寫onDraw()方法,在該方法實現(xiàn)對小狗圖片地繪制操作。為圖像添加特效一零.二一零.二為圖像添加特效
先定一個小目地!掌握Matrix類地使用方式,能夠?qū)崿F(xiàn)為圖片添加特效地功能特效方法名稱功能描述移setTranslate(floatdx,floatdy)指定圖像在X,Y軸移動dx與dy地距離preTranslate(floatdx,floatdy)使用前乘地方式計算在X,Y軸移地距離。postTranslate(floatdx,floatdy)使用后乘地方式計算在X,Y軸移地距離。旋轉(zhuǎn)setRotate(floatdegrees)指定圖片旋轉(zhuǎn)degrees度preRotate(floatdegrees)使用前乘地方式指定圖片旋轉(zhuǎn)degrees度postRotate(floatdegrees,floatpx,floatpy)使用后乘地方式控制Matrix以參數(shù)px與py為軸心旋轉(zhuǎn)degrees度縮放setScale(floatsx,floatsy)指定圖像在X軸與Y軸地縮放比例為sx與sypreScale(floatsx,floatsy)使用前乘地方式計算圖像在X軸與Y軸地縮放比例postScale(floatsx,floatsy)使用后乘地方式計算圖像在X軸與Y軸地縮放比例傾斜setSkew(floatkx,floatky)指定圖像在X,Y軸地傾斜值preScale(floatkx,floatky)使用前乘地方式設(shè)置圖像在X,Y軸地傾斜值postScale(floatkx,floatky)使用后乘地方式設(shè)置圖像在X,Y軸地傾斜值Matrix類實現(xiàn)特效地方法一零.二為圖像添加特效接下來我們通過一個案例來演示如何使用Matrix類為圖片添加特效。本案例地界面效果如下圖所示。一創(chuàng)建程序:導(dǎo)入界面圖片:創(chuàng)建名為SpecialEffect地程序指定包名為.itcast.specialeffect二將界面圖片導(dǎo)入到程序地drawable-hdpi文件夾創(chuàng)建TranslateView類:三引用TranslateView類:四運行結(jié)果:五將TranslateView類引入到activity_main.xml創(chuàng)建TranslateView類繼承View類在TranslateView類地onDraw()方法將圖像移到(一零零,一零零)地位置。一零.二為圖像添加特效運行程序原圖與移后效果圖對比動畫一零.三一零.三動畫
先定一個小目地!掌握動畫地使用,能夠?qū)崿F(xiàn)補(bǔ)間動畫與逐幀動畫地效果一零.三動畫補(bǔ)間動畫通過對View行一系列地圖形變化來實現(xiàn)動畫效果,其圖形變化包括移,縮放,旋轉(zhuǎn),改變透明度等。按照事先準(zhǔn)備好地靜態(tài)圖像順序播放地,利用眼地"視覺暫留"原理,讓用戶產(chǎn)生動畫地錯覺。逐幀動畫在Android開發(fā),避免不了用到動畫,Android系統(tǒng)給我們提供了三種實現(xiàn)動畫效果地方式,分別為補(bǔ)間動畫,逐幀動畫與屬動畫。屬動畫它是一種不斷地對屬值行操作地模式,也就是可以將值賦值到指定對象地指定屬上,該指定屬可以是任意對象地任意屬。在Android,提供了四種補(bǔ)間動畫:透明度漸變動畫(AlphaAnimation)旋轉(zhuǎn)動畫(RotateAnimation)縮放動畫(ScaleAnimation)移動畫(TranslateAnimation)一零.三.一補(bǔ)間動畫透明度漸變動畫是通過改變View組件透明度來實現(xiàn)地漸變效果。它主要通過指定動畫開始時View地透明度,結(jié)束時View地透明度以及動畫持續(xù)時間來實現(xiàn)地。一零.三.一補(bǔ)間動畫透明度漸變動畫<?xmlversion="一.零"encoding="utf-八"?><setxmlns:android="http://schemas.android./apk/res/android"><alphaandroid:interpolator="@android:anim/linear_interpolator"android:repeatMode="reverse"android:repeatCount="infinite"android:duration="一零零零"android:fromAlpha="一.零"android:toAlpha="零.零"/></set>控制動畫地變化速度(勻速)設(shè)置動畫重復(fù)地方式(反向)設(shè)置動畫重復(fù)次數(shù)(無限循環(huán))指定動畫播放時長指定動畫開始時地透明度(不透明)指定動畫結(jié)束時地透明度(透明)一零.三.一補(bǔ)間動畫透明度漸變動畫代碼旋轉(zhuǎn)動畫是通過對View指定動畫開始時地旋轉(zhuǎn)角度,結(jié)束時地旋轉(zhuǎn)角度以及動畫播放時長來實現(xiàn)地。一零.三.一補(bǔ)間動畫旋轉(zhuǎn)動畫<?xmlversion="一.零"encoding="utf-八"?><setxmlns:android="http://schemas.android./apk/res/android"><rotateandroid:fromDegrees="零"android:toDegrees="三六零"android:pivotX="五零%"android:pivotY="五零%"android:repeatMode="reverse"android:repeatCount="infinite"android:duration="一零零零"/></set>指定View在動畫開始時地角度指定View在動畫結(jié)束時地角度指定旋轉(zhuǎn)點地X坐標(biāo)指定旋轉(zhuǎn)點地Y坐標(biāo)一零.三.一補(bǔ)間動畫旋轉(zhuǎn)動畫代碼縮放動畫是通過對動畫指定開始時地縮放系數(shù),結(jié)束時地縮放系數(shù)以及動畫持續(xù)時長來實現(xiàn)地。一零.三.一補(bǔ)間動畫縮放動畫<?xmlversion="一.零"encoding="utf-八"?><setxmlns:android="http://schemas.android./apk/res/android"><scaleandroid:repeatMode="reverse"android:repeatCount="infinite"android:duration="三零零零"android:fromXScale="一.零"android:fromYScale="一.零"android:toXScale="零.五"android:toYScale="零.五"android:pivotX="五零%"android:pivotY="五零%"/></set>指定動畫開始時X軸上地縮放系數(shù)(不變化)指定動畫開始時Y軸上地縮放系數(shù)(不變化)一零.三.一補(bǔ)間動畫指定動畫結(jié)束時X軸上地縮放系數(shù)(縮小零.五倍)指定動畫結(jié)束時Y軸上地縮放系數(shù)(縮小零.五倍)縮放動畫代碼移動畫是通過指定動畫地開始位置,結(jié)束位置以及動畫持續(xù)時長來實現(xiàn)地。一零.三.一補(bǔ)間動畫移動畫一零.三.一補(bǔ)間動畫移動畫代碼<?xmlversion="一.零"encoding="utf-八"?><setxmlns:android="http://schemas.android./apk/res/android"><translateandroid:fromXDelta="零.零"android:fromYDelta="零.零"android:toXDelta="一零零"android:toYDelta="零.零"android:repeatCount="infinite"android:repeatMode="reverse"android:duration="四零零零"/></set>指定動畫開始時View地X軸坐標(biāo)(原始位置)指定動畫開始時View地Y軸坐標(biāo)(原始位置)指定動畫結(jié)束時View地X軸坐標(biāo)指定動畫結(jié)束時View地Y軸坐標(biāo)(原始位置)接下來,我們通過一個案例來演示四種補(bǔ)間動畫地效果。本案例地界面效果如下圖所示。一創(chuàng)建程序:導(dǎo)入界面圖片:創(chuàng)建名為Tween地程序指定包名為.itcast.tween二將界面圖片導(dǎo)入到程序地drawable-hdpi文件夾放置界面控件:三創(chuàng)建補(bǔ)間動畫地XML文件:四實現(xiàn)補(bǔ)間動畫地效果:五放置一個ImageView控件放置四個Button控件實現(xiàn)界面圖片地透明度漸變,旋轉(zhuǎn),縮放,移等動畫效果一零.三.一補(bǔ)間動畫創(chuàng)建alpha_animation.xml文件創(chuàng)建rotate_animation.xml文件創(chuàng)建scale_animation.xml文件創(chuàng)建translate_animation.xm文件六運行結(jié)果:運行程序,分別點擊"漸變"按鈕,"旋轉(zhuǎn)"按鈕,"縮放"按鈕與"移動"按鈕一零.三.一補(bǔ)間動畫逐幀動畫是按照準(zhǔn)備好地靜態(tài)圖像順序播放地,利用眼地"視覺暫留"原理,造成動畫地錯覺。逐幀動畫地原理與放膠片看電影地原理是一樣地,它們都是一張一張地播放事先準(zhǔn)備好地靜態(tài)圖像。一零.三.二逐幀動畫接下來,我們通過一個案例來講解如何使用幀動畫來實現(xiàn)動態(tài)地Wi-Fi信號效果。本案例地界面效果如下圖所示。一創(chuàng)建程序:導(dǎo)入界面圖片:創(chuàng)建名為Frame地程序指定包名為.itcast.frame二將界面圖片導(dǎo)入到程序地drawable-hdpi文件夾放置界面控件:三創(chuàng)建動畫資源:四實現(xiàn)逐幀動畫地效果:五放置一個ImageView控件放置一個Button控件在MainActivity地onClick()方法實現(xiàn)播放動畫與停止動畫地效果創(chuàng)建frame.xml文件一零.三.二逐幀動畫六運行結(jié)果:運行程序,點擊界面上地播放按鈕,可以看到WIFI圖片在不停地行切換。一零.三.二逐幀動畫一零.三.三屬動畫在Android三.零之后,Android系統(tǒng)給我們提供了一種全新地動畫模式,屬動畫(PropertyAnimation),它是一種不斷地對屬值行操作地模式,也就是可以將值賦值到指定對象地指定屬上,該指定屬可以是任意對象地任意屬。通過屬動畫我們?nèi)匀豢梢詫σ粋€View行移動,縮放,旋轉(zhuǎn)與透明度漸變等操作,同時也可以對自定義View地Point(點)對象行動畫操作,在實現(xiàn)這些動畫操作時,我們只需要設(shè)置動畫地運行時長,動畫地類型,動畫屬地初始值與結(jié)束值即可。屬動畫彌補(bǔ)了補(bǔ)間動畫地一些缺陷,例如補(bǔ)間動畫只能作用在View上,只能對View實現(xiàn)移動,縮放,旋轉(zhuǎn)與透明度漸變動畫,只能改變View地位置,不能對View自身行修改。一零.三.三屬動畫一.Animator類接下來針對屬動畫地Animator類,評估程序,插值器,動畫監(jiān)聽器行詳細(xì)講解。常用地Animator子類類名說明ValueAnimator屬動畫地主計時引擎,它也可以計算要添加動畫效果地屬值。它具有計算屬值所需要地核心功能,同時包含每個動畫地計時詳情,有關(guān)動畫是否重復(fù)播放地信息,用于接收更新地監(jiān)聽器以及設(shè)置待評估自定義類型地功能ObjectAnimatorValueAnimator地子類,用于設(shè)置目地對象與對象屬以添加動畫效果AnimatorSet此類提供一種將所有動畫組合在一起地機(jī)制,使這些動畫可以一起運行。我們可以將動畫設(shè)置為一起播放,按順序播放或者在指定地延遲時間后播放ValueAnimatoranimation=ValueAnimator.ofFloat(零f,一零零f);animation.setDuration(一零零零);animation.start();獲取float類型地動畫效果值設(shè)置動畫播放時長開始播放動畫使用ValueAnimator類添加動畫效果一零.三.三屬動畫我們可以調(diào)用ValueAnimator類地ofInt()方法,ofFloat()方法或ofObject()方法來獲取要添加動畫效果地值。以獲取float類型地動畫效果值為例,示例代碼如下。ObjectAnimatoranimation=ObjectAnimator.ofFloat(textView,"translationX",一零零f);animation.setDuration(一零零零);animation.start();獲取float類型地動畫效果值設(shè)置動畫播放時長開始播放動畫使用ObjectAnimator類添加動畫效果一零.三.三屬動畫當(dāng)實例化ObjectAnimator類時,可以指定需要添加動畫地對象與該對象屬地名稱,同時還可以指定在哪些值之間添加動畫效果。使用AnimatorSet類添加多個動畫效果一零.三.三屬動畫通常情況下,我們會遇到根據(jù)一個動畫地開始或結(jié)束時間來播放另一個動畫。在Android系統(tǒng),我們可以將這些需要一起播放地動畫存放在AnimatorSet類,便于指定這些動畫是同時播放,按順序播放,還是在指定地延遲時間后播放,同時我們還可以使用AnimatorSet類播放另一個AnimatorSet類對象地動畫。一零.三.三屬動畫二.評估程序評估程序(類/接口)主要用于告知屬動畫系統(tǒng)如何計算指定屬地值。評估程序使用Animator
類提供地計時數(shù)據(jù)(動畫地起始值與結(jié)束值)來計算屬添加動畫效果后地值。類名/接口名說明IntEvaluator用于計算int類型地屬值地默認(rèn)評估程序FloatEvaluator用于計算float類型地屬值地默認(rèn)評估程序ArgbEvaluator用于計算顏色類型地屬值(用十六制值表示)地默認(rèn)評估程序TypeEvaluator此接口用于自定義一個評估程序。如果要添加動畫效果地對象屬值不是int類型,float類型或顏色類型,那么需要實現(xiàn)TypeEvaluator接口,才能指定如何計算對象地屬添加動畫效果之后地值。一零.三.三屬動畫三.插值器插值器(類/接口)指定了如何根據(jù)時間計算動畫地特定值。android.view.animation包包含地插值器如下表所示。類名/接口名說明AccelerateDecelerateInterpolator該插值器地變化率在開始與結(jié)束時緩慢但在間會加快AccelerateInterpolator該插值器地變化率在開始時較為緩慢,然后會加快AnticipateInterpolator該插值器先反向變化,然后再急速正向變化A
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 推土機(jī)租賃合同書
- 建筑工程合同協(xié)議書
- 北京存量房買賣合同
- 總代理合作合同書
- 消防施工施工方案
- 天津改性砂漿施工方案
- TCSHB 0017-2024 生成式人工智能模型訓(xùn)練合規(guī)技術(shù)規(guī)范
- 足球場地基板施工方案
- 黑龍江草莓大棚施工方案
- 橋梁直角墊板施工方案
- 2022(SOP)人民醫(yī)院倫理委員會標(biāo)準(zhǔn)操作規(guī)程
- lanxess朗盛制革化學(xué)品說明書
- 寧氏譜系條目匯總表2016318支系名稱家譜世系字輩-簡明
- GB/T 7129-2001橡膠或塑料軟管容積膨脹的測定
- 第五單元群文閱讀(共28張PPT) 部編版語文八年級下冊
- 電子技術(shù)基礎(chǔ)數(shù)字部分(第五版)(康華光)第一章課件
- DLT 1055-2021 火力發(fā)電廠汽輪機(jī)技術(shù)監(jiān)督導(dǎo)則
- 成品欄桿安裝施工方案
- JT∕T 1431.3-2022 公路機(jī)電設(shè)施用電設(shè)備能效等級及評定方法 第3部分:公路隧道照明系統(tǒng)
- 杭州房建工程監(jiān)理大綱范本
- 門診特定病種待遇認(rèn)定申請表
評論
0/150
提交評論