概要:
本人在目前項目中很多頁面都需要自定義控件,所以抽出時間對自定義控件進行系統的複習,並對此發表一下本人的拙見,也方便今後複習。
學習之前先看一下,這次分享最終要做的自定義控件吧,整張圖除了中間的文字是TextView 其他的都是畫出來的,而且圓指向柱狀體頂部的箭頭是
通過計算出來位置後畫出來的。這個Demo我會在最後一篇文章中進行分享
好其他不多說開始這次的學習之旅吧!!!
Paint類
首先看一下Paint類官方說明
The Paint class holds the style and color information about how to draw geometries, text and bitmaps.
*如何設置幾何形狀,文本和位圖的風格和顏色時,Paint身上有這些信息可以進行設置。
(一)獲取Paint
Paint paint = new Paint();
(二)Paint的API
// paint恢復爲默認設置。
paint.reset();
// 從src目錄中裝載一種畫筆的樣式
paint.set(src);
// 設置畫筆的透明度
paint.setAlpha(a);
// 設置畫筆的抗鋸齒情況,使畫筆更爲圓滑
paint.setAntiAlias(aa);
// 設個畫筆的ARGB顏色色值
paint.setARGB(a, r, g, b);
// 設置畫筆的顏色
paint.setColor(color);
// 設置畫筆的過濾器
paint.setColorFilter(filter);
// 設置清除抖動對圖像的影響,會使繪製出來的圖片圖像更加清晰,顏色更加平滑和飽滿.
paint.setDither(dither);
// 設置粗體文字,注意設置在小字體上效果會非常差
paint.setFakeBoldText(fakeBoldText);
// 如果該項設置爲true,則圖像在動畫進行中會濾掉對Bitmap圖像的優化操作,加快速度顯示
// 注意:本設置項依賴於dither和xfermode的設置
paint.setFilterBitmap(filter);
// 給畫筆做上標記,以便直接複用
paint.setFlags(flags);
// 設置畫筆的隱藏模式
paint.setHinting(mode);
// 設置線性文本
paint.setLinearText(linearText);
// 設置MaskFilter,可以用不同的MaskFilter實現濾鏡的效果,如濾化,立體等
paint.setMaskFilter(maskfilter);
// 設置繪製路徑的效果,如點畫線等
paint.setPathEffect(effect);
// 設置或清除的光柵對象。
// 通過空清除任何以前的光柵化。爲方便起見,傳遞的參數也回來了。
paint.setRasterizer(rasterizer);
// 設置或清除渲染對象。
// 通過空清以前的任何材質。爲方便起見,傳遞的參數也回來了。
paint.setShader(shader);
// 這原圖層下面設置陰影層,產生陰影效果,radius爲陰影的角度,dx和dy爲陰影在x軸和y軸上的距離,color爲陰影的顏色。如果半徑爲0,然後一層陰影去除。
paint.setShadowLayer(radius, dx, dy, color);
// 設置畫筆帶有刪除線效果的
paint.setStrikeThruText(strikeThruText);
// 當畫筆樣式爲STROKE或FILL_OR_STROKE時,設置筆刷的圖形樣式,如圓形樣式
// Cap.ROUND,或方形樣式Cap.SQUARE
paint.setStrokeCap(cap);
// 設置筆畫的傾斜度
paint.setStrokeMiter(miter);
// 設置畫筆結合處的樣式,Miter:結合處爲銳角, Round:結合處爲圓弧:BEVEL:結合處爲直線。
paint.setStrokeJoin(join);
// 當畫筆是空心樣式時,設置畫筆空心的寬度
paint.setStrokeWidth(width);
// 設置畫筆的樣式
// Paint.Style.FILL(實心);
// Paint.Style.STROKE(空心);
// Paint.Style.FILL_AND_STROKE
paint.setStyle(Paint.Style.FILL_AND_STROKE);
// 設置該項爲true,將有助於文本在LCD屏幕上的顯示效果
paint.setSubpixelText(subpixelText);
// 設置繪製文字的對齊方向
paint.setTextAlign(align);
// 設置文本的區域比如中文、日文等
paint.setTextLocale(locale);
// 設置畫筆文本的縮放比例
paint.setTextScaleX(scaleX);
// 設置畫筆文本的大小
paint.setTextSize(textSize);
// 設置斜體文字,skewX爲傾斜弧度
paint.setTextSkewX(skewX);
// 設置Typeface對象,即字體風格,包括粗體,斜體以及襯線體,非襯線體等
paint.setTypeface(typeface);
//設置帶有下劃線的文字效果
paint.setUnderlineText(underlineText);
//設置圖形重疊時的處理方式,如合併,取交集或並集,經常用來製作橡皮的擦除效果
paint.setXfermode(xfermode);
// 1.基準點是baseline
// 2.ascent:是baseline之上至字符最高處的距離
// 3.descent:是baseline之下至字符最低處的距離
paint.ascent();
paint.descent();
// 清除透明陰影層。
paint.clearShadowLayer();
// 獲取畫筆透明度
paint.getAlpha();
// 獲取畫筆顏色
paint.getColor();
// 獲取畫筆過濾器
paint.getColorFilter();
// 獲取
paint.getFillPath(src, dst);
// 獲取該筆的標誌,
paint.getFlags();
// 測量字體的大小
paint.getFontMetrics();
paint.getFontMetrics(metrics);
paint.getFontMetricsInt();
paint.getFontMetricsInt(fmi);
// 獲取字體的間距
paint.getFontSpacing();
// 返回畫筆的隱藏模式。返回hinting_off或hinting_on。
paint.getHinting();
// 獲取maskfilter對象
paint.getMaskFilter();
// 獲取patheffect對象
paint.getPathEffect();
// 獲取油漆的光柵化(或NULL)。
// 光柵控制/修改/文本路徑如何變成透明遮罩。
paint.getRasterizer();
//獲取shader對象
paint.getShader();
//獲取Cap實例控制如何開始和結束的撫摸線和路徑的處理
paint.getStrokeCap();
paint.getStrokeJoin();
//獲取畫筆的斜角
paint.getStrokeMiter();
//獲取畫筆寬度
paint.getStrokeWidth();
//返回畫筆的樣式
paint.getStyle();
//獲取文本的其實位置
paint.getTextAlign();
//返回文字的邊界
paint.getTextBounds(text, index, count, bounds);
paint.getTextBounds(text, start, end, bounds);
//返回文字的區域
paint.getTextLocale();
//返回文字的路徑
paint.getTextPath(text, index, count, x, y, path);
paint.getTextPath(text, start, end, x, y, path);
//返回X軸文字的縮放
paint.getTextScaleX();
//返回文字的大小
paint.getTextSize();
//返回文字的傾斜度
paint.getTextSkewX();
//返回文字的寬度
paint.getTextWidths(text, widths);
paint.getTextWidths(text, index, count, widths);
paint.getTextWidths(text, start, end, widths);
paint.getTextWidths(text, start, end, widths);
//設定一個最大寬度,在不超過這個寬度的話返回實際測量值,超過則停止測量
paint.breakText(text, measureForwards, maxWidth, measuredWidth);
paint.breakText(text, index, count, maxWidth, measuredWidth);
paint.breakText(text, start, end, measureForwards, maxWidth,
measuredWidth);
//返回typeface對象,對文字進行字體繪製或測量文本
paint.getTypeface();
//返回getXfermode對象
paint.getXfermode();
paint.isAntiAlias();
paint.isDither();
paint.isFakeBoldText();
paint.isFilterBitmap();
paint.isLinearText();
paint.isStrikeThruText();
paint.isSubpixelText();
paint.isUnderlineText();
//對文字進行測量
paint.measureText(text);
paint.measureText(text, index, count);
paint.measureText(text, start, end);
paint.measureText(text, start, end);