編輯:關於Android編程
前面章節我們說了如何定義屬性、如何定義寬高,這樣之後組件的簡單外形或輪廓就已經出來,或者說已經定義出了畫布的大小,解下來就是如何在畫布上揮毫潑墨了。
組件(除了容器組件)實際上都是靠畫出來的,通過系統提供的畫筆(Paint)以及基本圖形(圓、矩形、直線等)就可以完整的勾畫出一個組件。下面就詳細介紹如何畫以及一些技巧:
如何獲取顏色
一般情況下,要實現啥樣的組件,是由美工設計出效果圖,或者是網上找的些圖片樣式,這樣就需要將效果圖上的顏色摳下來,否則,你想通過肉眼就能知道這個顏色的編碼是啥,那只有悟空大師兄才知道。
這樣我們就要簡單的學習下Photoshop的簡單用法,吸管使用:
Android中顏色編碼是可以設置透明度的,如:0x00XXXXXX --- 0xFFXXXXXX。 其中0x代表十六進制書寫格式。緊接著後倆位就是透明度的,00--FF(0--255)共有256個級別的,00表示完全透明,FF表示完全不透明。
2.如何畫
重寫onDraw方法:
1.
@Override
2.
protected
void
onDraw(Canvas canvas) {
3.
super
.onDraw(canvas);
4.
///需要畫的
5.
}
每次頁面需要刷新或重繪時或者說頁面需要顯示組件時,onDraw都會被調用,在其中我們將組件(利用畫筆Paint)畫到畫布上即可。
canvas是畫布,大小和組件的大小是一致的。
注意:onDraw每次被調用時canvas畫布都是一個干淨的、空白的、透明的,他不會記錄以前畫上去的。
3.Paint和Canvas基本方法介紹:
Paint:
void
void
void
void
void
void
PathEffect
Rasterizer
Shader
void
void
void
Typeface
void
Canvas:
void drawRect(RectF rect, Paint paint) //利用畫筆paint,繪制區域,參數一為RectF一個區域
void drawPath(Path path, Paint paint) //繪制一個路徑,參數一為Path路徑對象
void
void
void
void drawText(String text, float x, float y, Paint paint)
void
4.簡單例子
01.
/**
02.
* 畫邊框
03.
*/
04.
private
void
onDraw(Canvas canvas){
05.
super
.onDraw(canvas);
06.
//創建畫筆
07.
Paint paint =
new
Paint();
08.
paint.setColor(
0xFF817F7F
);
//設置畫筆顏色
09.
RectF rectF =
new
RectF(
0
,
0
,
200
,
200
);
//創建一個矩形
10.
11.
//畫矩形
12.
canvas.drawRect(rectF, paint);
//利用畫筆將矩形畫到畫布上
13.
14.
//畫文字
15.
paint.setTextSize(
24
);
//設置文字字體大小
16.
canvas.drawText(
看源社區
,
0
,
0
, paint);
//注意,這樣花,文字的左上角並沒與畫布的左上角對齊
17.
18.
//畫文字,對齊
19.
int
top =
20
;
20.
int
left =
30
;
21.
FontMetricsInt fontMetrics = paint.getFontMetricsInt();
22.
int
txtHeight = fontMetrics.bottom - fontMetrics.ascent;
23.
canvas.drawText(text, left, top-fontMetrics.ascent, paint);
//這樣畫,就能是文字左上角與畫布的左上角對齊。這裡涉及文字的中心線問題,可以參考其他文章。
24.
}
另外,如果我想組件刷新或重新畫,也就是onDraw重新被調用時,可以使用invalidate()方法。
今天看到一篇自定view 實現水波紋效果 覺得真心不錯 學習之後再次寫下筆記和心得.但是感覺原作者寫得有些晦澀難懂,也許是本人愚笨 所以重寫此作者教程.感覺他在自定義vi
一般來說。熟悉Android程序設計的人都知道Android有三個基礎組件Activity,Service和BroadcastReceiver,他們都是依賴Intent來
一、概述最近一直關注熱修復的東西,偶爾聊天談到了增量更新,當然了兩個完全不是一個東西。借此找了一些資料,收集整理了一下,本來是不想寫博客的,因為主要都是工具的實現,但是昨
在Android群裡,經常會有人問我,Android Log是怎麼用的,今天我就把從網上以及SDK裡東拼西湊過來,讓大家先一睹為快,希望對大家入門Android Log有