Android View如何繪制
上文說(shuō)道了Android如何測(cè)量,但是一個(gè)漂亮的控件我只知道您長(zhǎng)到哪兒,這當(dāng)然不行。只需要簡(jiǎn)單重寫OnDraw方法,并在Canvas(畫布)對(duì)象上調(diào)用那根五顏六色的畫筆就能夠畫出這控件"性感"的外表。那么View又是如何進(jìn)行繪制了?
要了解View如何繪制,就需要了解canvas(畫布)是什么?paint(畫筆)能夠做什么。
?、?、canvas就是表示一塊畫布,你可以在上面畫你所朝思暮想的東西。當(dāng)我們重寫onDraw方法的時(shí)候,就能夠拿到一個(gè)Canvas對(duì)象,這個(gè)就是你的舞臺(tái),畫你所思所想。上代碼了。
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); }
當(dāng)您需要對(duì)某某控件進(jìn)行進(jìn)行重新繪制的時(shí)候,我們只需要在這個(gè)大舞臺(tái)(Canvas)調(diào)用Canvas.DrawXXX方法畫出各種各樣的圖形。
?、?、paint就是畫布上揮灑自如的畫筆。要畫圖,得調(diào)整畫筆,待畫筆調(diào)整好之后,再將圖像繪制到畫布上,這樣才可以顯示在手機(jī)屏幕上。Paint上提供許多屬性和方法用來(lái)設(shè)置畫筆。
1、setAntiAlias: 設(shè)置畫筆的鋸齒效果。
2、setColor: 設(shè)置畫筆顏色
3、setARGB: 設(shè)置畫筆的a,r,p,g值。
4、setAlpha: 設(shè)置Alpha值
5、setTextSize: 設(shè)置字體尺寸。
6、setStyle: 設(shè)置畫筆風(fēng)格,空心或者實(shí)心。
7、setStrokeWidth: 設(shè)置空心的邊框?qū)挾取?
8、getColor: 得到畫筆的顏色
9、getAlpha: 得到畫筆的Alpha值。
我們既然知道了畫筆與畫布,通過(guò)一個(gè)短小精悍的例子來(lái)看畫布和畫筆怎么共同作用出一個(gè)想要的圖形。老樣子,上代碼:
public class MyView extends View { private Paint paint; public MyView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { paint=new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColor(Color.RED); paint.setStrokeWidth(5); paint.setTextSize(28); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(measureWidth(widthMeasureSpec), measureWidth(heightMeasureSpec)); } public int measureWidth(int measureSpec) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.EXACTLY) { result = specSize; } else { result = 200; if (specMode == MeasureSpec.AT_MOST) { result = Math.min(specSize, result); } } return result; } @Override protected void onDraw(Canvas canvas) { canvas.drawText("中國(guó)", 0, 80, paint); super.onDraw(canvas); } }
上述代碼,我們做了這么幾件事了:
Ⅰ、我們運(yùn)用上篇文章的知識(shí),重寫了onMeasure方法,讓這個(gè)簡(jiǎn)單自定義控件自適應(yīng)wrap_content屬性。
?、?、我們調(diào)用了OnDraw方法,拿到Canvas與paint,在view上寫了"中國(guó)"文字。
最終運(yùn)行效果為:
這就是我對(duì)Android View 如何繪制一點(diǎn)灼見(jiàn),希望大家多提建議。
相關(guān)文章
Android開(kāi)發(fā)之使用GridView展示圖片的方法
這篇文章主要介紹了Android開(kāi)發(fā)之使用GridView展示圖片的方法,涉及Android使用GridView操作圖片的布局與圖片調(diào)用功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-01-01Flutter 插件url_launcher簡(jiǎn)介
最近項(xiàng)目需求是打開(kāi)一個(gè)連接跳轉(zhuǎn)到安卓或蘋果默認(rèn)的瀏覽器。雖然開(kāi)始一個(gè)簡(jiǎn)單的要求,其中的一個(gè)細(xì)節(jié)就是執(zhí)行打開(kāi)網(wǎng)頁(yè)這一操作后,不能看上去像在應(yīng)用內(nèi)部打開(kāi),看上去要在應(yīng)用外部打開(kāi),今天小編給大家介紹Flutter 插件url_launcher的相關(guān)知識(shí),感興趣的朋友一起看看吧2020-04-04Android項(xiàng)目類似淘寶 電商 搜索功能,監(jiān)聽(tīng)軟鍵盤搜索事件,延遲自動(dòng)搜索,以及時(shí)間排序的搜索歷史記錄的實(shí)現(xiàn)
本篇文章主要介紹了Android實(shí)現(xiàn)類似淘寶、電商、搜索功能(監(jiān)聽(tīng)軟鍵盤搜索事件,延遲自動(dòng)搜索,以及時(shí)間排序的搜索歷史記錄),感興趣的小伙伴們可以參考一下。2016-10-10Android開(kāi)發(fā)獲取短信的內(nèi)容并截取短信
本文給大家介紹android開(kāi)發(fā)獲取短信內(nèi)容并截取短息的相關(guān)內(nèi)容,本文代碼簡(jiǎn)單易懂,感興趣的朋友一起學(xué)習(xí)吧2015-12-12談?wù)剬?duì)Android View事件分發(fā)機(jī)制的理解
本篇文章主要介紹了談?wù)剬?duì)Android View事件分發(fā)機(jī)制的理解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01android Activity相對(duì)布局的使用方法
Activity相對(duì)布局控件的位置是與其周圍控件的位置相關(guān)的,從名字可以看出來(lái),這些位置都是相對(duì)的,確定出了其中一個(gè)控件的位置就可以確定另一個(gè)控件的位置,下面用實(shí)例說(shuō)明Activity相對(duì)布局的使用方法2013-11-11Android自定義帶增長(zhǎng)動(dòng)畫和點(diǎn)擊彈窗提示效果的柱狀圖DEMO
這篇文章主要介紹了Android自定義帶增長(zhǎng)動(dòng)畫和點(diǎn)擊彈窗提示效果的柱狀圖的相關(guān)資料,非常不錯(cuò)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11android實(shí)現(xiàn)一個(gè)圖片驗(yàn)證碼倒計(jì)時(shí)功能
本文通過(guò)實(shí)例代碼給大家介紹了android實(shí)現(xiàn)一個(gè)圖片驗(yàn)證碼倒計(jì)時(shí)功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-11-11