<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    咖啡伴侶

    呆在上海
    posts - 163, comments - 156, trackbacks - 0, articles - 2

    高級(jí)畫(huà)布繪圖(1)

    Posted on 2011-07-26 11:14 oathleo 閱讀(341) 評(píng)論(0)  編輯  收藏 所屬分類: Android

    11.4.3  高級(jí)畫(huà)布繪圖(1)

    我們已經(jīng)在第4章中介紹了Canvas,在那里,已經(jīng)學(xué)習(xí)了如何創(chuàng)建自己的View。在第7章中也使用了Canvas來(lái)為MapView標(biāo)注覆蓋。

    畫(huà)布(Canvas)是圖形編程中一個(gè)很普通的概念,通常由三個(gè)基本的繪圖組件組成:

    Canvas  提供了繪圖方法,可以向底層的位圖繪制基本圖形。

    Paint  也稱為"刷子",Paint可以指定如何將基本圖形繪制到位圖上。

    Bitmap  繪圖的表面。

    這一章中描述的大部分高級(jí)技術(shù)都涉及到了對(duì)Paint對(duì)象的變化和修改,從而可以向那些平面的光柵圖片添加深度和紋理。

    Android繪圖API支持透明度、漸變填充、圓邊矩形和抗鋸齒。遺憾的是,由于資源限制,它還不支持矢量圖形,它使用的是傳統(tǒng)光柵樣式的重新繪圖。

    這種光柵方法的結(jié)果是提高了效率,但是改變一個(gè)Paint對(duì)象不會(huì)影響已經(jīng)畫(huà)好的基本圖形,它只會(huì)影響新的元素。

    提示:

    如果你擁有Windows開(kāi)發(fā)背景,那么Android的2D繪圖能力大致相當(dāng)于GDI+的能力。

    1. 可以畫(huà)什么?

    Canvas類封裝了用作繪圖表面的位圖;它還提供了draw*方法來(lái)實(shí)現(xiàn)設(shè)計(jì)。

    下面的列表提供了對(duì)可用的基本圖形的簡(jiǎn)要說(shuō)明,但并沒(méi)有深入地探討每一個(gè)draw方法的詳細(xì)內(nèi)容:

    drawARGB / drawRGB / drawColor  使用單一的顏色填充畫(huà)布。

    drawArc  在一個(gè)矩形區(qū)域的兩個(gè)角之間繪制一個(gè)弧。

    drawBitmap  在畫(huà)布上繪制一個(gè)位圖。可以通過(guò)指定目標(biāo)大小或者使用一個(gè)矩陣來(lái)改變目標(biāo)位圖的外觀。

    drawBitmapMesh  使用一個(gè)mesh(網(wǎng))來(lái)繪制一個(gè)位圖,它可以通過(guò)移動(dòng)網(wǎng)中的點(diǎn)來(lái)操作目標(biāo)的外觀。

    drawCircle  以給定的點(diǎn)為圓心,繪制一個(gè)指定半徑的圓。

    drawLine(s)  在兩個(gè)點(diǎn)之間畫(huà)一條(多條)直線。

    drawOval  以指定的矩形為邊界,畫(huà)一個(gè)橢圓。

    drawPaint  使用指定的Paint填充整個(gè)Canvas

    drawPath  繪制指定的Path。Path對(duì)象經(jīng)常用來(lái)保存一個(gè)對(duì)象中基本圖形的集合。

    drawPicture  在指定的矩形中繪制一個(gè)Picture對(duì)象。

    drawPosText  繪制指定了每一個(gè)字符的偏移量的文本字符串。

    drawRect  繪制一個(gè)矩形。

    drawRoundRect  繪制一個(gè)圓角矩形。

    drawText  在Canvas上繪制一個(gè)文本串。文本的字體、大小和渲染屬性都設(shè)置在用來(lái)渲染文本的Paint對(duì)象中。

    drawTextOnPath  在一個(gè)指定的path上繪制文本。

    drawVertices  繪制一系列三角形面片,通過(guò)一系列頂點(diǎn)來(lái)指定它們。

    這些繪圖方法中的每一個(gè)都需要指定一個(gè)Paint對(duì)象來(lái)渲染它。在下面的部分中,將學(xué)習(xí)如何創(chuàng)建和修改Paint對(duì)象,從而在繪圖中完成大部分工作。

    2. 從Paint中完成工作

    Paint類相當(dāng)于一個(gè)筆刷和調(diào)色板。它可以選擇如何使用上面描述的draw方法來(lái)渲染繪制在畫(huà)布上的基本圖形。通過(guò)修改Paint對(duì)象,可以在繪 圖的時(shí)候控制顏色、樣式、字體和特殊效果。最簡(jiǎn)單地,setColor可以讓你選擇一個(gè)Paint的顏色,而Paint對(duì)象的樣式(使用setStyle 控制)則可以決定是繪制繪圖對(duì)象的輪廓(STROKE),還是只填充每一部分(FILL),或者是兩者都做(STROKE_AND_FILL)

    除了這些簡(jiǎn)單的控制之外,Paint類還支持透明度,另外,它也可以通過(guò)使用各種各樣的陰影、過(guò)濾器和效果進(jìn)行修改,從而提供由更豐富的、復(fù)雜的畫(huà)筆和顏料組成的調(diào)色板。

    Android SDK包含了一些非常好的實(shí)例,它們說(shuō)明了Paint類中可用的大部分功能。你可以在API demos的graphics子目錄中找到它們:

    1. [sdk root folder]\samples\ApiDemos\src\com\android\samples\graphics 

    在下面的部分中,將學(xué)習(xí)和使用其中的部分功能。這些部分只是簡(jiǎn)單地羅列了它們能實(shí)現(xiàn)的效果(例如漸變和邊緣浮雕),而沒(méi)有詳細(xì)地列出所有可能的情況。

    使用透明度

    Android中的所有顏色都包含了一個(gè)不透明組件(alpha通道)。

    當(dāng)創(chuàng)建一個(gè)顏色的時(shí)候,可以使用argb或者parseColor方法來(lái)定義它的alpha值,如下所示:

    1. // 使用紅色,并讓它50%透明  
    2. int opacity = 127;  
    3. int intColor = Color.argb(opacity, 255, 0, 0);  
    4. int parsedColor = Color.parseColor("#7FFF0000"); 

    或者,也可以使用setAlpha方法來(lái)設(shè)置已存在的Paint對(duì)象的透明度:

    1. // 讓顏色50%透明  
    2. int opacity = 127;  
    3. myPaint.setAlpha(opacity); 

    創(chuàng)建一個(gè)不是100%透明的顏色意味著,使用它繪制的任何基本圖形都將是部分透明的--也就是說(shuō),在它下面繪制的所有基本圖形都是部分可見(jiàn)的。

    可以在任何使用了顏色的類或者方法中使用透明效果,包括Paint、Shader和Mask Filter。

    Shader介紹

    Shader類的派生類可以創(chuàng)建允許使用多種固體顏色填充繪圖對(duì)象的Paint。

    對(duì)Shader最常見(jiàn)的使用是定義漸變填充;漸變是在2D圖像中添加深度和紋理的最佳方式之一。Android包含了一個(gè)Bitmap Shader和一個(gè)Compose Shader,同時(shí),還包含了三個(gè)漸變的Shader。

    試圖用語(yǔ)言來(lái)描述繪圖的效果本來(lái)就是沒(méi)有意義的,所以看一下圖11-1就應(yīng)該可以知道每一種Shader是如何工作的。圖中從左到右依次代表的是LinearGradient、RadialGradient和 SweepGradient.

     
    (點(diǎn)擊查看大圖)圖11-1
    主站蜘蛛池模板: 免费一级特黄特色大片在线观看| 亚洲女同成人AⅤ人片在线观看| 亚洲精品自偷自拍无码| 狠狠久久永久免费观看| www成人免费观看网站| 亚洲视频一区二区在线观看| 成人免费在线观看网站| 中文字幕一区二区免费| 亚洲一区二区三区在线| 亚洲成a人一区二区三区| 在线免费观看你懂的| 亚洲国产成人无码AV在线影院| 超清首页国产亚洲丝袜| 国产成人免费网站| 精品97国产免费人成视频| 亚洲国产美女精品久久| 亚洲第一区精品观看| 久久久久久精品免费免费自慰| 男女超爽视频免费播放| 亚洲视频一区在线| 国产精品亚洲不卡一区二区三区 | 亚洲精品乱码久久久久久蜜桃图片| 亚洲AⅤ永久无码精品AA| 91精品导航在线网址免费| 美女裸免费观看网站| 亚洲福利电影在线观看| 中文字幕亚洲电影| 女人18毛片特级一级免费视频| 国产午夜精品免费一区二区三区| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲bt加勒比一区二区| 亚洲一区无码精品色| 最近2019中文字幕免费看最新 | 无码亚洲成a人在线观看| 亚洲精品美女在线观看| a级亚洲片精品久久久久久久 | 黄人成a动漫片免费网站| 亚洲午夜精品在线| 亚洲高清视频在线观看| 免费在线精品视频| 啦啦啦www免费视频|