日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

详解Paint的各种set方法

發(fā)布時(shí)間:2024/1/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解Paint的各种set方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、前言

我們用set方法來(lái)設(shè)置畫(huà)筆的樣式,類(lèi)似于我們挑選畫(huà)筆畫(huà)畫(huà)的過(guò)程。由于上面有些方法不支持硬件加速,所以在高版本系統(tǒng)中可能會(huì)沒(méi)有效果。因此,我們首先來(lái)看看官方廢棄的方法。

當(dāng)你要使用打叉的方法時(shí),請(qǐng)關(guān)閉硬件加速。關(guān)閉的方法有兩種: (1)?在application配置文件中關(guān)閉硬件加速: <applicationandroid:allowBackup="true"android:hardwareAccelerated="false" android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" > ……

(2)在自定義view中調(diào)用方法來(lái)關(guān)閉:

setLayerType(LAYER_TYPE_SOFTWARE, null);

注意:?因?yàn)樵谂渲梦募嘘P(guān)閉會(huì)讓整個(gè)應(yīng)用程序無(wú)法使用硬件加速的特性,所以強(qiáng)烈建議用第二種方式進(jìn)行關(guān)閉。?

二、詳細(xì)解讀各種set方法

set(Paint src)

顧名思義為當(dāng)前畫(huà)筆設(shè)置一個(gè)畫(huà)筆,說(shuō)白了就是把另一個(gè)畫(huà)筆的屬性設(shè)置Copy給我們的畫(huà)筆,不累贅了

setAlpha(int?a);

設(shè)置繪制圖形的透明度,設(shè)置范圍是[0..255]

setAntiAlias(boolean aa)

打開(kāi)抗鋸齒。抗鋸齒是依賴(lài)于算法的,算法決定抗鋸齒的效率,在我們繪制棱角分明的圖像時(shí),比如一個(gè)矩形、一張位圖,我們不需要打開(kāi)抗鋸齒。

setARGB(int a, int r, int g, int b)

設(shè)置繪制的顏色,a代表透明度,r,g,b代表顏色值。

setColor(int color)

設(shè)置繪制的顏色,使用顏色值來(lái)表示,該顏色值包括透明度和RGB顏色。?

setColorFilter(ColorFilter filter)

設(shè)置顏色過(guò)濾,這個(gè)方法需要我們傳入一個(gè)ColorFilter參數(shù)同樣也會(huì)返回一個(gè)ColorFilter實(shí)例。?如需詳細(xì)了解,請(qǐng)參考:

詳解Paint的setColorFilter(ColorFilter filter)

setDither(boolean?dither)

setElegantTextHeight(boolean elegant)

具體效果未知,個(gè)人測(cè)試后出現(xiàn)了沒(méi)有此方法的異常,百度無(wú)果。故,暫時(shí)不推薦使用。

setFakeBoldText (boolean fakeBoldText)

設(shè)置文本仿粗體。注意設(shè)置在小字體上效果會(huì)非常差。

setFilterBitmap(boolean filter)

如果該項(xiàng)設(shè)置為true,則圖像在動(dòng)畫(huà)進(jìn)行中會(huì)濾掉對(duì)Bitmap圖像的優(yōu)化操作,加快顯示速度,本設(shè)置項(xiàng)依賴(lài)于dither和xfermode的設(shè)置。

setFlags?(int flags)

設(shè)置標(biāo)志,還是對(duì)paint進(jìn)行樣式的設(shè)置。比如:

// 實(shí)例化畫(huà)筆并打開(kāi)抗鋸齒 mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

setFontFeatureSettings(String settings)?

設(shè)置字體的樣式,這個(gè)樣式和CSS樣式很類(lèi)似。樣式可以為null,可以參考:http://dev.w3.org/csswg/css-fonts/#propdef-font-feature-settings

setHinting(int mode)

設(shè)置畫(huà)筆的隱藏模式。可以是?HINTING_OFF?or?HINTING_ON之一。

setLetterSpacing(float letterSpacing)

設(shè)置行間距,默認(rèn)是0.

setLinearText (boolean linearText)

設(shè)置是否打開(kāi)線性文本標(biāo)識(shí),這玩意對(duì)大多數(shù)人來(lái)說(shuō)都很奇怪不知道這玩意什么意思。想要明白這東西你要先知道文本在Android中是如何進(jìn)行存儲(chǔ)和計(jì)算的。在Android中文本的繪制需要使用一個(gè)bitmap作為單個(gè)字符的緩存,既然是緩存必定要使用一定的空間,我們可以通過(guò)setLinearText (true)告訴Android我們不需要這樣的文本緩存。

setMaskFilter(MaskFilter maskfilter)

setMaskFilter(MaskFilter maskfilter)是paint中的方法,它可以用來(lái)對(duì)圖像進(jìn)行一定的處理。?如需詳細(xì)了解,請(qǐng)參考:

詳解Paint的setMaskFilter(MaskFilter maskfilter)

setPathEffect(PathEffect?effect)

設(shè)置繪制路徑的效果,如點(diǎn)畫(huà)線等?。?如需詳細(xì)了解,請(qǐng)參考:

詳解Paint的setPathEffect(PathEffect effect)

setRasterizer (Rasterizer rasterizer)

設(shè)置光柵,光柵這東西涉及太多太多物理知識(shí)。該方法同樣不支持HW在API 21中被遺棄了,所以不推薦使用。

setShadowLayer(float radius, float dx, float dy, int shadowColor)

radius表示陰影的擴(kuò)散半徑;dx和dy表示陰影平面上的偏移值;shadowColor就不說(shuō)了陰影顏色。

注意:?這個(gè)方法不支持硬件加速,所以我們要測(cè)試時(shí)必須先關(guān)閉硬件加速。?

該方法為我們繪制的圖形添加一個(gè)陰影層效果:

@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 關(guān)閉單個(gè)view的硬件加速setLayerType(LAYER_TYPE_SOFTWARE, null); // 先繪制位圖 mPaint.setColor(Color.RED);// 設(shè)置陰影效果mPaint.setShadowLayer(10, 3, 3, Color.DKGRAY); // 畫(huà)一個(gè)矩形 canvas.drawRect(200, 200, 600, 600, mPaint); }

BlurMaskFilter可以模擬類(lèi)似效果,跟BlurMaskFilter比起來(lái)setShadowLayer()方法是不是更簡(jiǎn)捷呢?但是BlurMaskFilter能做的setShadowLayer卻不一定能做到哦!

setStrokeCap(Paint.Cap cap)

該方法用來(lái)設(shè)置我們畫(huà)筆的?筆觸風(fēng)格?,比如:ROUND,表示是圓角的筆觸。那么什么叫筆觸呢,其實(shí)很簡(jiǎn)單,就像我們現(xiàn)實(shí)世界中的筆,如果你用圓珠筆在紙上戳一點(diǎn),那么這個(gè)點(diǎn)一定是個(gè)圓,即便很小,它代表了筆的筆觸形狀,如果我們把一支鉛筆筆尖削成方形的,那么畫(huà)出來(lái)的線條會(huì)是一條彎曲的“矩形”,這就是筆觸的意思。除了ROUND,Paint.Cap還提供了另外兩種類(lèi)型:SQUARE和BUTT?

setStrokeJoin(Paint.Join join)

這個(gè)方法用于設(shè)置接合處的形態(tài),就像你用代碼畫(huà)了一條線,但是這條線其實(shí)是由無(wú)數(shù)條小線拼接成的,拼接處的形狀就由該方法指定。可選參數(shù)是:BEVEL,MITER,ROUND。

mPaint.setStrokeJoin(Paint.Join.ROUND);

setStrokeWidth(float width);

當(dāng)畫(huà)筆樣式(style)為STROKE或FILL_OR_STROKE時(shí)(空心樣式時(shí)),設(shè)置筆刷的粗細(xì)度。

setStrokeMiter(float miter )

設(shè)置筆畫(huà)的傾斜度,取值:>=0。如:小時(shí)候用的鉛筆,削的時(shí)候斜與垂直削出來(lái)的筆尖效果是不一樣的。主要是用來(lái)設(shè)置筆觸的連接處的樣式。可以和setStrokeJoin()來(lái)比較比較。

setStyle(Style style)?

置畫(huà)筆樣式,如果不設(shè)置,默認(rèn)是全部填充(FILL)。可選項(xiàng)為:FILL,FILL_OR_STROKE,或STROKE?

?

畫(huà)筆樣式分三種:

1.Paint.Style.STROKE:描邊

2.Paint.Style.FILL_AND_STROKE:描邊并填充

3.Paint.Style.FILL:填充

setSubpixelText?(boolean??subpixelText?)

設(shè)置自像素。如果該項(xiàng)為true,將有助于文本在LCD屏幕上的顯示效果。

setXfermode(Xfermode xfermode)?

設(shè)置圖像的混合模式,詳細(xì)使用方式請(qǐng)參考:

詳解Paint的setXfermode(Xfermode xfermode)

——————————————————————————————————————

注意:下方的方法僅僅是簡(jiǎn)要的介紹,如果想要詳細(xì)了解,請(qǐng)移步:

用TextPaint來(lái)繪制文字

setStrikeThruText (boolean strikeThruText)

設(shè)置文本刪除線。

setTextAlign (Paint.Align align)

設(shè)置文本的對(duì)齊方式,可供選的方式有三種:CENTER,LEFT和RIGHT。

setTextLocale (Locale locale)

設(shè)置地理位置,這里如果你要使用,直接傳入Locale.getDefault()即可。它用來(lái)設(shè)置文本的區(qū)域比如中文、日文等。

setTextScaleX (float scaleX)

將文本沿X軸水平縮放,默認(rèn)值為1,當(dāng)值大于1會(huì)沿X軸水平放大文本,當(dāng)值小于1會(huì)沿X軸水平縮放文本

setTextSize (float textSize)

設(shè)置文字的大小,但是要注意該值必需大于零。

setTextSkewX(float skewX)

設(shè)置文本在水平方向上的傾斜。這個(gè)傾斜值沒(méi)有具體的范圍,但是官方推崇的值為-0.25可以得到比較好的傾斜文本效果,值為負(fù)右傾值為正左傾,默認(rèn)值為0。

setTypeface?(Typeface typeface)?

設(shè)置文本字體樣式。

setUnderlineText(boolean underlineText)

設(shè)置文字的下劃線。?

轉(zhuǎn)載于:https://www.cnblogs.com/krislight1105/p/5092692.html

總結(jié)

以上是生活随笔為你收集整理的详解Paint的各种set方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。