1.1 基本圖形繪製
1.1.1 概述
- Paint、Canvas
1.1.2 畫筆的基本設置
1.setAntiAlias() 抗鋸齒
2.setColor() 顏色
3.setStyle() 填充樣式
Paint.Style.FILL
Paint.Style.FILL_AND_STROKE
Paint.Style.STROKE
4.setStrokeWidth() 描邊寬度值
1.1.3 Canvas 使用基礎
- 設置畫布背景
void drawColor()
void drawARGB()
void drawRGB()
- 畫直線
1.void drawLine()
與畫筆的 Style 沒有關係,與 StrokeWidth 有關
2.void drawLines() 多條直線
- 點
1.void drawPoint()
1.void drawPoints() 多個點
- 矩形工具類 RectF、Rect
1.RectF 保存 float,Rect 保存 int 類型
Rect rect = new Rect(10,10,100,100);
Rect rect = new Rect();
rect.set(10,10,100,100);
- 矩形
1.普通矩形
void drawRect(float left, float top, float right, float bottom, Paint paint)
void drawRect(RectF rect, Paint paint)
void drawRect(Rect r, Paint paint)
2.圓角矩形
void drawRoundRect(RectF rect, float rx, float ry, Paint paint)
- 圓形
void drawCircle(float cx, float cy, float radius, Paint paint)
- 橢圓
void drawOval(RectF oval, Paint paint)
- 弧
void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
startAngle:弧開始的角度,以 X 軸正方向爲 0°。
sweepAngle:弧持續的角度。
useCenter:是否有弧的兩邊
1.1.4 Rect 與 RectF
boolean contains(int x, int y)
boolean contains(int left, int top, int right, int bottom)
boolean contains(Rect r)
static boolean intersects(Rect a, Rect b)
boolean intersects(int left, int top, int right, int bottom)
boolean intersect(int left, int top, int right, int bottom)
boolean intersect(Rect r)
public void union(int left, int top, int right, int bottom)
public void union(Rect r)
public void union(int x, int y)
1.1.5 Color
static int argb(int alpha, int red, int green, int blue)
static int rgb(int red, int green, int blue)
static int alpha(int color)
static int red(int color)
static int green(int color)
static int blue(int color)
1.2 路徑
1.2.1 概述
void drawPath(Path path, Paint paint)
1.2.2 直線路徑
void moveTo(float x1, float y1)
void lineTo(float x2, float y2)
void close()
1.2.3 弧線路徑
void arcTo(RectF oval, float startAngle, float sweepAngle)
void arcTo(float left, float top, float right, float bottom, float startAngle, float sweepAngle,boolean forceMoveTo)
void arcTo(RectF oval, float startAngle, float sweepAngle, boolean
forceMoveTo)
forceMoveTo:是否強制將弧的起始點作爲繪製起始位置
1.2.4 addXXX系列函數
- 作用:讓我們直接往 Path 中添加一些曲線,而不必考慮連貫性
void addRect(float left, float top, float right, float bottom, Path.Direction
dir)
void addRect(RectF rect, Path.Direction dir)
Path.Direction:用於依據生成方向排版的文字
Path.Direction.CCW:是 counter-clockwise 的縮寫,指創建逆時針方向的矩形路徑。
Path.Direction.CW:是 clockwise 的縮寫,指創建順時針方向的矩形路徑。
void addRoundRect(RectF rect, float[] radii, Path.Direction dir)
void addRoundRect(RectF rect, float rx, float ry, Path.Direction dir)
void addCircle(float x, float y, float radius, Path.Direction dir)
void addOval(RectF oval, Path.Direction dir)
void addArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle)
void addArc(RectF oval, float startAngle, float sweepAngle)
1.2.5 填充模式
path.setFillType()
FillType.WINDING:默認值,當兩個圖形相交時,取相交部分顯示。
FillType.EVEN_ODD:取 path 所在並不相交的區域。
FillType.INVERSE_WINDING:取 path 的外部區域。
FillType.INVERSE_EVEN_ODD:取 path 的外部和相交區域
1.2.6 重置路徑
- 路徑對象一旦被重置,其中保存的所有路徑都將被清空
void reset() 會清除內存,但不會清除 FillType。
void rewind() 不會清除內存,但會清除 FillType;
1.3 文字
paint.setStyle(Paint.Style.FILL);
paint.setTextAlign(Align.CENTER);
paint.setTextSize(12);
paint.setFakeBoldText(true);
paint.setUnderlineText(true);
paint.setTextSkewX((float) -0.25);
paint.setStrikeThruText(true);
paint.setTextScaleX(2);
1.3.2 Canvas 繪製文本
void drawText(String text, float x, float y, Paint paint)
void drawText(CharSequence text, int start, int end, float x, float y, Paint paint)
void drawText(String text, int start, int end, float x, float y, Paint paint)
void drawText(char[] text, int index, int count, float x, float y, Paint paint)
void drawPosText(String text, float[] pos, Paint paint)
void drawPosText(char[] text, int index, int count, float[] pos, Paint paint)
void drawTextOnPath (String text, Path path, float hOffset, float vOffset, Paint paint)
void drawTextOnPath (char[] text, int index, int count, Path path, float hOffset, float vOffset,Paint paint)
hOffset: X 軸方向的偏移量
vOffset: Y 軸方向的偏移量
Typeface setTypeface(Typeface typeface)
Typeface.SANS_SERIF、Typeface.MONOSPACE、Typeface.SERIF
Typeface.NORMAL:正常字體。
Typeface.BOLD:粗體。
Typeface.ITALIC:斜體。
Typeface.BOLD_ITALIC:粗斜體。
Typeface createFromAsset(AssetManager mgr, String path)
Typeface createFromFile(String path)
Typeface createFromFile(File path)
1.4 Region
- 區域,任意形狀的封閉圖形。
1.4.1 Region
public Region(Region region)
public Region(Rect r)
public Region(int left, int top, int right, int bottom)
private void drawRegion(Canvas canvas,Region rgn,Paint paint) {
RegionIterator iter = new RegionIterator(rgn);
Rect r = new Rect();
while (iter.next(r)) {
canvas.drawRect(r, paint);
}
}
set()函數
1.4.2 枚舉區域-RegionIterator類
RegionIterator(Region region)
boolean next(Rect r)
boolean union(Rect r)
boolean op()
1.5 Canvas
- 每次調用 drawXXX 系列函數來繪圖時,都會產生一個全新的 Canvas 透明圖層。
- 如果在調用 drawXXX 系列函數前,調用平移、旋轉等函數對 Canvas 進行了操作,那麼這個操作是不可逆的。每次產生的畫布的最新位置都是執行這些操作後的位置。
- 在 Canvas 圖層與屏幕合成時,超出屏幕範圍的圖像是不會顯示出來的。
void translate(float dx, float dy)
void rotate(float degrees)
void rotate(float degrees, float px, float py)
public void scale(float sx, float sy)
void skew(float sx, float sy)
clipRect()
clipRegion()
1.5.2 畫布的保存與恢復
- save():每次調用 save() 函數,都會先保存當前畫布的狀態,然後將其放入特定的棧中。
- restore():每次調用 restore()函數,都會把棧中頂層的畫布狀態取出來,並按照這個狀態恢復當前的畫布,然後在這個畫布上作畫。
- restoreToCount(int saveCount):將指定索引的畫布作爲當前畫布。
1.6.1 控件概述
public class CustomView extends View {
public CustomView(Context context) {
super(context);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
}