【自定義控件系列二】android畫圖類---Paint淺談

概要:

本人在目前項目中很多頁面都需要自定義控件,所以抽出時間對自定義控件進行系統的複習,並對此發表一下本人的拙見,也方便今後複習。


學習之前先看一下,這次分享最終要做的自定義控件吧,整張圖除了中間的文字是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);




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章