java setpaintmode 用法_詳解Paint的各種set方法

(1)?在application配置文件中關閉硬件加速:

android:allowBackup="true"android:hardwareAccelerated="false"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

……

(2)在自定義view中調用方法來關閉:

setLayerType(LAYER_TYPE_SOFTWARE, null);

注意:?因為在配置文件中關閉會讓整個應用程序無法使用硬件加速的特性,所以強烈建議用第二種方式進行關閉。

二、詳細解讀各種set方法

set(Paint src)

顧名思義為當前畫筆設置一個畫筆,說白了就是把另一個畫筆的屬性設置Copy給我們的畫筆,不累贅了

setAlpha(int?a);

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

setAntiAlias(boolean aa)

打開抗鋸齒。抗鋸齒是依賴于算法的,算法決定抗鋸齒的效率,在我們繪制棱角分明的圖像時,比如一個矩形、一張位圖,我們不需要打開抗鋸齒。

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

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

setColor(int color)

設置繪制的顏色,使用顏色值來表示,該顏色值包括透明度和RGB顏色。

setColorFilter(ColorFilter filter)

設置顏色過濾,這個方法需要我們傳入一個ColorFilter參數同樣也會返回一個ColorFilter實例。?如需詳細了解,請參考:

setDither(boolean?dither)

5092692.html

5092692.html

setElegantTextHeight(boolean elegant)

具體效果未知,個人測試后出現了沒有此方法的異常,百度無果。故,暫時不推薦使用。

setFakeBoldText (boolean fakeBoldText)

設置文本仿粗體。注意設置在小字體上效果會非常差。

setFilterBitmap(boolean filter)

如果該項設置為true,則圖像在動畫進行中會濾掉對Bitmap圖像的優化操作,加快顯示速度,本設置項依賴于dither和xfermode的設置。

setFlags?(int flags)

設置標志,還是對paint進行樣式的設置。比如:

// 實例化畫筆并打開抗鋸齒

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

setFontFeatureSettings(String settings)

setHinting(int mode)

setLetterSpacing(float letterSpacing)

設置行間距,默認是0.

setLinearText (boolean linearText)

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

setMaskFilter(MaskFilter maskfilter)

setMaskFilter(MaskFilter maskfilter)是paint中的方法,它可以用來對圖像進行一定的處理。?如需詳細了解,請參考:

setPathEffect(PathEffect?effect)

設置繪制路徑的效果,如點畫線等?。?如需詳細了解,請參考:

setRasterizer (Rasterizer rasterizer)

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

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

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

注意:?這個方法不支持硬件加速,所以我們要測試時必須先關閉硬件加速。

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

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

// 關閉單個view的硬件加速

setLayerType(LAYER_TYPE_SOFTWARE, null);

// 先繪制位圖

mPaint.setColor(Color.RED);

// 設置陰影效果

mPaint.setShadowLayer(10, 3, 3, Color.DKGRAY);

// 畫一個矩形

canvas.drawRect(200, 200, 600, 600, mPaint);

}

5092692.html

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

setStrokeCap(Paint.Cap cap)

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

setStrokeJoin(Paint.Join join)

這個方法用于設置接合處的形態,就像你用代碼畫了一條線,但是這條線其實是由無數條小線拼接成的,拼接處的形狀就由該方法指定。可選參數是:BEVEL,MITER,ROUND。

mPaint.setStrokeJoin(Paint.Join.ROUND);

setStrokeWidth(float width);

當畫筆樣式(style)為STROKE或FILL_OR_STROKE時(空心樣式時),設置筆刷的粗細度。

setStrokeMiter(float miter )

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

setStyle(Style style)

置畫筆樣式,如果不設置,默認是全部填充(FILL)。可選項為:FILL,FILL_OR_STROKE,或STROKE

畫筆樣式分三種:

1.Paint.Style.STROKE:描邊

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

3.Paint.Style.FILL:填充

setSubpixelText?(boolean??subpixelText?)

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

setXfermode(Xfermode xfermode)

設置圖像的混合模式,詳細使用方式請參考:

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

注意:下方的方法僅僅是簡要的介紹,如果想要詳細了解,請移步:

setStrikeThruText (boolean strikeThruText)

設置文本刪除線。

setTextAlign (Paint.Align align)

設置文本的對齊方式,可供選的方式有三種:CENTER,LEFT和RIGHT。

setTextLocale (Locale locale)

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

setTextScaleX (float scaleX)

將文本沿X軸水平縮放,默認值為1,當值大于1會沿X軸水平放大文本,當值小于1會沿X軸水平縮放文本

setTextSize (float textSize)

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

setTextSkewX(float skewX)

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

setTypeface?(Typeface typeface)

設置文本字體樣式。

setUnderlineText(boolean underlineText)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529201.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529201.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529201.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SPI 讀取不同長度 寄存器_[讀書筆記]《計算機科學速成課》—6 寄存器和內存

上節中介紹的ALU進行計算后得到的結果需要對其進行存儲,可能還要進行多個連續操作,這就需要用到計算機內存了。計算機使用的是隨機存取存儲器(Random Access Memory, RAM),其只能在有電的情況下存儲東西。另一種存儲稱…

one more step_KDA新歌《MORE》的一些冷知識:伊芙琳換回原聲,摩托車是定制的

原標題:KDA新歌《MORE》的一些冷知識:伊芙琳換回原聲,摩托車是定制的KDA女團在2020年宣布回歸后就引發了很多的關注,回歸后也是推出了首支單曲《THE BADDEST》,這首歌在之后也引發了不少網友的模仿以及翻唱&#xff0c…

java jdbc連接 代碼塊_java 中JDBC連接數據庫代碼和步驟詳解及實例代碼

?創建一個以JDBC連接數據庫的程序,包含7個步驟:1、加載JDBC驅動程序:在連接數據庫之前,首先要加載想要連接的數據庫的驅動到JVM(Java虛擬機),這通過java.lang.Class類的靜態方法forName(String className)實現。 例…

Java不是true值不變_Java語言中String a=a;String b=a; 為什么 a==b 值為 true?

目前排名比較靠前的答案都回答得很淺顯易懂了。我這里給你一個最可靠的理論依據(雖然比較晦澀)。Java語言規范(JavaSE 1.8版本)章節3.10.5中對此作了規范,因此所有的Java語言編譯、運行時環境實現都必須依據此規范來實現。里面有這么一句話Moreover, a string liter…

計算H時M分S秒以后是_關于工程量計算-深圳工程量計算培訓

一、梯形體積計算公式?第一種:梯形的體積(上底下底)高2總長度第二種:把四棱臺延長成椎上截面面積為s,下截面r,臺高為h,那么體積1/3(r-s)*h.若是正梯形物體則為V〔S1+S2+開根號(S1*S2…

java數據庫edit_Java數據庫連接——JDBC基礎知識(操作數據庫:增刪改查)

一、JDBC簡介JDBC是連接java應用程序和數據庫之間的橋梁。什么是JDBC?Java語言訪問數據庫的一種規范,是一套API。JDBC (Java Database Connectivity) API,即Java數據庫編程接口,是一組標準的Java語言中的接口和類,使用這些接口和類&#xff…

java ssm 系統的搭建_SSM框架下的javaweb學生管理系統--搭建系統結構

業務需求:一個登錄頁面,一個學生展示頁面,添加、修改、刪除三個功能目的是給大家了解一個初級系統的構造,不寫那么復雜的需求了。從第一步開始:創建項目打開eclipse,點擊右上角的File-->New-->Dynami…

opencv 高通濾波和低通濾波_濾波電路合集(低通濾波,CLCП濾波,DLC濾波,CRC П濾波)...

常見低通濾波電路L 一階濾波C 一階濾波CL 二階濾波RC 二階濾波LC 二階濾波RCR T型三階濾波LCL T型三階濾波CRC π三階濾波CLC π三階濾波開關電源 單級低通濾波回路DLC 型二階濾波器開關電源 雙級串聯式低通濾波回路CLC П型濾波器1、工作原理介紹a.輸入正脈沖時,先給C1充電,充…

matlab語音信號處理實驗_現代通信綜合實驗系統平臺

現代通信綜合實驗系統平臺近30年來,隨著我國電信行業的迅猛發展,該行業的發展水平已成為衡量一個國家實力的一大關鍵因子。行業的發展同時,為當代相關專業大學生創造了極大的就業市場,市場對通信類人才有著極大的需求。培養一代全面型通信類人…

java 異常拋出空指針異常_java.lang.NullPointerException 拋出空指針異常

練習cookie做一個瀏覽商品記錄顯示,第一次會顯示瀏覽過的商品,然后在瀏覽第二次就出現空指針異常2016-6-16 16:51:48 org.apache.catalina.core.StandardWrapperValve invoke嚴重: Servlet.service() for servlet [CookieDemo2] in context with path [/…

iphone儲存空間系統怎么清理_教你快速清理 iPhone 系統緩存垃圾,拒絕卡頓!

「 改變能改變的一切,接受不能改變的一切!」▼“iPhone存儲空間”里的系統為何占用了幾十G的甚至上百G的內存,如何清理?當我們使用 iPhone 一段時間之后,系統或應用中會出現一些多余的緩存數據,如果長時間不…

倒N字形排列java_Java排序8大算法實現

概述排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。我們這里說說八大排序就是內部排序。當n較大,則應采用時間復…

cross_val_score 如何對孤立森林_【收藏】森林防火手抄報素材匯總!

森林防火手抄報模板參考【文字素材參考】01森林防火根據森林火災燃燒中央地點,蔓延速度,受害部位和程度,大致可把森林火災分為三大類:一.地表火 二.樹冠火 三.地下火。以受害森林面積大小為標準,森林火災分為以下四類:1.森林火警:…

java io 轉換流_Java編程IO流中的轉換流

對于IO流中的轉換流,顧名思義,就是將字符流轉換成字節流或者是將字節流轉換成字符流的對象。那么有時候我們得到的是一個字符流,但是我們又需要進行一些計算之類的,或者我們得到的是一個字節流,但是我們又需要進行一些…

pb9 調用系統語音_成都電銷系統一個月多少錢_選擇靈狐傳媒_收費透明

靈狐傳媒表示:成都電銷系統一個月多少錢_選擇靈狐傳媒_收費透明,在成都想要找一家專業的電銷系統,今天小編帶您看看該怎么選擇吧,和研發實踐,融合互聯網、云計算及人工智能、通信、大數據等技術,研發推出了以人工智能為…

java thread 線程銷毀_手把手帶你了解Java線程的實現方式及生命周期原理

前言我們在工作中線程技術很多情況下都能用的到,而且我們在面試的時候,線程技術基本上也是必問的。今天我來從線程的實現方式以及線程的生命周期做一個全面的講解與分析,幫助大家能更好的去了解線程技術。概念我們先來了解下線程和進程的概念…

python自動化_python自動化測試-Behave框架的用法介紹 - python測試學習

測碼學院 Behave框架的用法介紹眾所周知:行為驅動開發((behavior-drivendevelopment,BDD)是一種基于敏捷軟件開發的方法。它可以鼓勵開發人員,業務參與者和QA人員之間的協作。作為另一個Python自動化測試框架,“Behave”允許團隊…

虛擬按鍵自己觸發的java代碼_在SystemUI添加虛擬按鍵

我們想要在volume、back、menu同一排添加一個虛擬按鍵,并且觸發一個應用;1、首先我們要找到這些虛擬按鍵的位置:\frameworks\base\packages\SystemUI\res\layout-sw600dp\navigation_bar.xml2、橫屏時,最左邊的RelativeLayout 中添…

diskgeniusv4.4.0_入門TensorFlow2.0

今天老師帶領我們入門TensorFlow2.0。至于tensorflow2.0是啥嘛,詳細的可以度娘一下。我簡述一下,就是一個end-to-end machine-Learning open source plantform(端對端的開源機器學習的平臺)。學習tensorflow需要引入tensor這個概念,tensor的漢語意思就是…

java.close用法_void close()

void close()描述 (Description)java.io.FilterInputStream.close()方法關閉此輸入流并釋放與該流關聯的所有系統資源。聲明 (Declaration)以下是public void close()方法的聲明 -public void close()參數 (Parameters)NA返回值 (Return Value)該方法不返回任何值。異常 (Excep…