Android View如何繪制
上文說(shuō)道了Android如何測(cè)量,但是一個(gè)漂亮的控件我只知道您長(zhǎng)到哪兒,這當(dāng)然不行。只需要簡(jiǎn)單重寫(xiě)OnDraw方法,并在Canvas(畫(huà)布)對(duì)象上調(diào)用那根五顏六色的畫(huà)筆就能夠畫(huà)出這控件"性感"的外表。那么View又是如何進(jìn)行繪制了?
要了解View如何繪制,就需要了解canvas(畫(huà)布)是什么?paint(畫(huà)筆)能夠做什么。
?、瘛anvas就是表示一塊畫(huà)布,你可以在上面畫(huà)你所朝思暮想的東西。當(dāng)我們重寫(xiě)onDraw方法的時(shí)候,就能夠拿到一個(gè)Canvas對(duì)象,這個(gè)就是你的舞臺(tái),畫(huà)你所思所想。上代碼了。
@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方法畫(huà)出各種各樣的圖形。
Ⅱ、paint就是畫(huà)布上揮灑自如的畫(huà)筆。要畫(huà)圖,得調(diào)整畫(huà)筆,待畫(huà)筆調(diào)整好之后,再將圖像繪制到畫(huà)布上,這樣才可以顯示在手機(jī)屏幕上。Paint上提供許多屬性和方法用來(lái)設(shè)置畫(huà)筆。
1、setAntiAlias: 設(shè)置畫(huà)筆的鋸齒效果。
2、setColor: 設(shè)置畫(huà)筆顏色
3、setARGB: 設(shè)置畫(huà)筆的a,r,p,g值。
4、setAlpha: 設(shè)置Alpha值
5、setTextSize: 設(shè)置字體尺寸。
6、setStyle: 設(shè)置畫(huà)筆風(fēng)格,空心或者實(shí)心。
7、setStrokeWidth: 設(shè)置空心的邊框?qū)挾取?
8、getColor: 得到畫(huà)筆的顏色
9、getAlpha: 得到畫(huà)筆的Alpha值。
我們既然知道了畫(huà)筆與畫(huà)布,通過(guò)一個(gè)短小精悍的例子來(lái)看畫(huà)布和畫(huà)筆怎么共同作用出一個(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í),重寫(xiě)了onMeasure方法,讓這個(gè)簡(jiǎn)單自定義控件自適應(yīng)wrap_content屬性。
?、?、我們調(diào)用了OnDraw方法,拿到Canvas與paint,在view上寫(xiě)了"中國(guó)"文字。
最終運(yùn)行效果為:

這就是我對(duì)Android View 如何繪制一點(diǎn)灼見(jiàn),希望大家多提建議。
相關(guān)文章
簡(jiǎn)單實(shí)現(xiàn)android短信發(fā)送器
這篇文章主要為大家詳細(xì)介紹了如何簡(jiǎn)單實(shí)現(xiàn)android短信發(fā)送器 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Android調(diào)用系統(tǒng)自帶的分享功能實(shí)例代碼
本篇文章主要介紹了Android調(diào)用系統(tǒng)自帶的分享功能實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
Android 實(shí)現(xiàn)永久性開(kāi)啟adb 的root權(quán)限
這篇文章主要介紹了Android 實(shí)現(xiàn)永久性開(kāi)啟adb 的root權(quán)限,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Android?TextView冷門(mén)實(shí)用方法技巧
這篇文章主要為大家介紹了Android?TextView冷門(mén)實(shí)用方法技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Android圖表庫(kù)HelloCharts的實(shí)例詳解
這篇文章主要介紹了Android中的圖標(biāo)庫(kù)HelloCharts的一些簡(jiǎn)單使用實(shí)例,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的參考價(jià)值,需要的可以參考一下2022-01-01
Android View實(shí)現(xiàn)圓形進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Android View實(shí)現(xiàn)圓形進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Android實(shí)現(xiàn)左右擺動(dòng)的球體動(dòng)畫(huà)效果
這篇文章主要介紹了Android實(shí)現(xiàn)左右擺動(dòng)的球體動(dòng)畫(huà)效果,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
Android基于OpenCV實(shí)現(xiàn)非真實(shí)渲染
非真實(shí)感渲染(Non Photorealistic Rendering,簡(jiǎn)稱NPR),是指利用計(jì)算機(jī)模擬各種視覺(jué)藝術(shù)的繪制風(fēng)格,也用于發(fā)展新的繪制風(fēng)格。比如模擬中國(guó)畫(huà)、水彩、素描、油畫(huà)、版畫(huà)等藝術(shù)風(fēng)格。本文將講解Android基于OpenCV實(shí)現(xiàn)非真實(shí)渲染的方法2021-06-06
Android PopupWindow全屏詳細(xì)介紹及實(shí)例代碼
這篇文章主要介紹了 Android PopupWindow全屏詳細(xì)介紹及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-12-12
Android 系統(tǒng)實(shí)現(xiàn)多種開(kāi)機(jī)動(dòng)畫(huà)和logo切換功能
這篇文章主要介紹了android 系統(tǒng)實(shí)現(xiàn)多種開(kāi)機(jī)動(dòng)畫(huà)和logo切換功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-12-12

