2021年美圖秀秀開發(fā)2D繪圖_第1頁
2021年美圖秀秀開發(fā)2D繪圖_第2頁
2021年美圖秀秀開發(fā)2D繪圖_第3頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1.美圖秀秀-開發(fā)2d繪圖浪費時間是所有支出中最奢侈最昂貴的。富蘭克林已經(jīng)講解了有關(guān)布局和各種可用的android view類的知識,可以使屏幕設(shè)計變得簡潔而高效?,F(xiàn)在考慮一些底層的問題,探討如何在屏幕上繪制對象。本章討論android內(nèi)建的2維繪制特性,包括在創(chuàng)建自定義view類中使用canvas和paint在屏幕上進行圖形和文本的繪制等,還將討論在屏幕上顯示動畫的各種方法。1.1屏幕繪圖基礎(chǔ)android可以在屏幕上繪制各種諸如png和jpg這樣的圖像,以及文本和基本圖像??梢允褂酶鞣N顏色、樣式和漸變來繪制它們,還可以使用標準的圖像變換方法來對它們進行修改。我們甚至還可以讓這些可繪制的對象

2、動起來,以制造生動的效果。在android下進行2d繪圖需要canvas類的支持,它位于android.graphics.canvas包下,直譯過來為畫布的意思,用于完成在view上的繪圖,即使用android.view.view類的ondraw的方法。在android sdk種支持多種圖形效果,例如基本的圖形元素(直線、圓形、弧度等),設(shè)置位圖的透明度,畫位圖、旋轉(zhuǎn)位圖等等。1.1canvas類繪制圖形通常在android.view.view或其子類的ondraw方法中進行。該方法的定義如下- protected void ondraw(canvas canvas);- 其中canvas對象

3、提供了大量繪圖方法,這些方法主要包含繪制一條路徑、區(qū)域、貼圖、畫點、畫線、渲染文本,這些都是繪制圖形的基本元素,如果繪制更為復(fù)雜的圖形,可以采用組合的這些元素的方式來完成,下面看看繪制圖形的基本方法1、繪制像素- public native void drawpoint(float x, float y, paint paint); /畫一個像素點public native void drawpoint(float pts, int offset, int count, paint paint); /畫多個像素點public void drawpoint(float pts, paint pa

4、int); /畫多個像素點- 詞條解釋x像素點的橫坐標y像素點的縱坐標paint描述像素點屬性的paint對象,可以設(shè)置坐標點像素的大小,顏色等屬性。繪制其他圖形元素的paint對象與繪制像素點的paint對象的含義相同。在繪制具體的圖形元素是可以根據(jù)實際情況設(shè)置paint對象。ptsdrawpoint方法可一次性畫多個像素點,pts參數(shù)表示多個像素點的坐標。該數(shù)組元素必須是偶數(shù),兩個一組為一個像素點的坐標。offsetdrawpoint方法可以取pts數(shù)組中的一部分連續(xù)元素作為像素點的坐標,因此需要通過offser參數(shù)來指定取得數(shù)組中連續(xù)元素的第一個元素位置,也就是元素的偏移量,從開始。co

5、unt獲得數(shù)組元素的個數(shù)。count必須為偶數(shù)(兩個元素為一個像素點坐標)。需要注意的是offset可以從任意點取值。2、繪制直線- public void drawline(float start_x, float start_y, float stop_x, float stop_y, paint paint);/畫一條直線public native void drawline (float pts, int offset, int count, paint paint);/畫多條直線public void drawline (float pts, paint paint); /畫多條直線

6、- 詞條解釋start_x直線開始端的橫坐標start_y直線開始端的縱坐標stop_x直線結(jié)束端的橫坐標stop_y直線結(jié)束端的縱坐標pts表示繪制多條直線的端點坐標集合,4個數(shù)組元素(兩個為開始端點坐標,兩個為結(jié)束端點坐標)為一組,表述一條直線。offsetpts數(shù)組元素的偏移量。count獲得pts數(shù)組元素的個數(shù)。count必須為4的倍數(shù)。3、繪制圓形- public void drawcircle (float cx, float cy,float radius, paint paint);- 詞條解釋cx圓心的橫坐標。cx圓心的橫坐標。radius圓的半徑。4、繪制弧- public

7、 void drawarc(rectf oval,float startangle, float sweepangle,boolean usecenter, paint paint); - 詞條解釋oval弧的外切矩形坐標。需要設(shè)置該矩形的左上角和右下角的坐標,也就是oval.left、oval.top、oval.right和oval.bottom。startangle弧的起始角度。sweepangle弧的結(jié)束角度。如果sweepangle- startangle大于等于36,drawarc畫的就是一個圓或者橢圓(如果oval指定的坐標畫出來的是一個長方形,則drawarc畫出來的為橢圓)。u

8、secenter如果該參數(shù)值為true,在畫弧度時弧的兩個端點會連接圓心;如果該參數(shù)值為false,則只會畫弧。5、繪制文本- public native void drawtext(string text,float x, float y, paint paint); /畫text指定的文本。文本中的每一個字符的起始坐標由pos數(shù)組中的值決定。public void drawpostext (string text, float pos, paint paint); /畫text指定的文本。文本中的每一個字符的起始坐標由pos數(shù)組中的值決定,并且可以選擇text中的某一段連續(xù)的字符繪制。pu

9、blic void drawpostext (char text,int index,int count,float pos, paint paint);- 詞條解釋textdrawtext方法中的text參數(shù)表示要繪制的文本,drawpostext方法中的text參數(shù)表示要繪制的文本,但是每個字符的坐標需要單獨指定,如果未指定某個字符的坐標系統(tǒng)會拋出異常。x繪制文本的起始點的橫坐標。y繪制文本的起始點的縱坐標。index選定的字符集合在text數(shù)組中的索引。count選定的字符集合中的字符數(shù)。從上面可以看出canvas繪制類比較簡單同時很靈活,實現(xiàn)一般的方法通常沒有問題,同時可以疊加的處理設(shè)

10、計出一些效果,若把canvas當(dāng)做繪畫師來看,那么paint就是繪畫的工具,比如畫筆、畫刷、顏料等等。在android設(shè)備上處理圖形最常用到的就是在一個view上畫一些圖片、形狀或者自定義的文本內(nèi)容,這里都可以使用canvas來實現(xiàn)的。你可以獲取view中的canvas對象,繪制一些自定義形狀,然后調(diào)用view.invalidate方法讓view重新刷新,然后繪制一個新的形狀,這樣達到2d動畫效果。下面就主要來了解下canvas的使用方法。canvas對象的獲取方式有兩種1、通過重寫view.ondraw方法,view中的canvas對象被當(dāng)做參數(shù)傳遞過來,操作canvas圖像效果會直接反應(yīng)在

11、view中。2、創(chuàng)建一個canvas對象直接在view中使用。上面說了這么多,那么來實戰(zhàn)一下,用點和線畫一個優(yōu)美的網(wǎng)格,創(chuàng)建一個名為drawpoints的項目,修改mainactivity中的代碼,如下所示- publicclass mainactivity extends activity overrideprotectedvoid oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);setcontentview(new sampleview(this);privatestaticclass sampl

12、eview extends view private paint mpaint=new paint();privatefloat mpts;privatestaticfinalfloat size=3;privatestaticfinalint segs=32;privatestaticfinalint x=;privatestaticfinalint y=1;privatevoid buildpoints() finalint ptcount=(segs + 1) * 2;mpts=newfloatptcount * 2;float value=;finalfloat delta=size

13、/ segs;for (int i=; i =touch_tolerance | dy =touch_tolerance) mpath.quadto(mx, my, (x + mx)/2, (y + my)/2);mx=x;my=y;privatevoid touch_up() mpath.lineto(mx, my);/從最后一個指定的xy點繪制一條線,如果沒有用moveto方法,那么起始點表示(,)點。mcanvas.drawpath(mpath, mpaint);/手指離開屏幕后,繪制創(chuàng)建的“所有”路徑。/ kill this so we dont double drawmpath.reset();overridepublicboolean ontouchevent(motionevent event) float x=event.getx();float y=event.gety();switch (event.getaction() case motionevent.action_down:/手指開始按壓屏幕,這個動作包含了初始化位置touch_start(x, y);invalidate();/刷新畫布,重新運行ondraw()方法brea

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論