Android Paint 你完全都了解了嗎(一)

1、顏色

1.1、基本顏色

像素的基本顏色根據(jù)繪制的內(nèi)容不同而有不同的方式:Canvas的顏色填充方法canvas.drawColor/drawRGB/drawdrawARGB()
顏色直接寫入方法中進行設(shè)置背景屉佳;canvas.drawBitmap()的顏色直接由Bitmap對象提供脚作;繪制圖形與文字的顏色則需要設(shè)置Paint钝尸。進入正題Pain設(shè)置顏色的方法分為兩種:

1.1.1挎狸、直接設(shè)置顏色
  • paint.setColor(int color) 或者 paint.setARGB();
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setARGB();
        canvas.drawRect(0, 0, 100, 100, paint);
rect.png
1.1.2 設(shè)置 Shader來實現(xiàn)著色方案

Android 通過Paint設(shè)置 setShader可以達到很多絢麗的效果。
Shader有LinearGradient河闰、RadialGradient科平、SweepGradient、BitmapShader姜性、ComposeShader 這五個子類分別代表了不同的著色規(guī)則瞪慧,下面來一一說明:

  • LinearGradient 線性漸變 設(shè)置兩個點和兩種顏色以點為端點,使用兩種顏色漸變繪制
        Shader shader = new LinearGradient(30, 30, 150, 150,
                Color.RED, Color.BLUE, Shader.TileMode.CLAMP);
        paint.setShader(shader);
        canvas.drawRect(30, 30, 150, 150, paint);

LinearGradient構(gòu)造方法中最后一個參數(shù)為TileMode部念,TileMode分為三種CLAMP會在端點之外延續(xù)端點處的顏色弃酌,REPEAT重復(fù)模式,MIRROR鏡像模式儡炼;看下效果:


shader.jpeg

ps:設(shè)置Shader后setColor所設(shè)置的顏色將不會生效妓湘。

  • RadialGradient 輻射漸變
    構(gòu)造方法:
    RadialGradient(float centerX, float centerY, float radius, int centerColor, int edgeColor, TileMode tileMode)。
    參數(shù):
    centerX centerY:輻射中心的坐標
    radius:輻射半徑
    centerColor:輻射中心的顏色
    edgeColor:輻射邊緣的顏色
    tileMode:輻射范圍之外的著色模式乌询。


    RadialGradient.jpeg
  • SweepGradient 掃描漸變
    構(gòu)造方法:
    SweepGradient(float cx, float cy, int color0, int color1)
    參數(shù):
    cx cy :掃描的中心
    color0:掃描的起始顏色
    color1:掃描的終止顏色


    SweepGradient.jpeg
  • BitmapShader Bitmap著色器
    構(gòu)造方法:
    BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY)
    參數(shù):
    bitmap:用來做模板的 Bitmap 對象
    tileX:橫向的 TileMode
    tileY:縱向的 TileMode榜贴。
    TileMode 同以上幾種著色器效果相同
  • ComposeShader 混合著色器 將多種著色器合并使用
    構(gòu)造方法:
    ComposeShader(Shader shaderA, Shader shaderB, PorterDuff.Mode mode)
    參數(shù):
    shaderA, shaderB:兩個相繼使用的 Shader
    mode: 兩個 Shader 的疊加模式。

PorterDuff.Mode用來指定兩個著色器繪制的策略目前一共有17種妹田,大致可以分為2類合成與混合唬党。
Alpha 合成:


PorterDuff-Alpha.jpeg

混合:


PorterDuff-blend.jpeg
1.2 ColorFilter 顏色過濾

通過setColorFilter 進行設(shè)置顏色過濾;ColorFilter有三個子類:LightingColorFilter PorterDuffColorFilter 和 ColorMatrixColorFilter鬼佣。

  • LightingColorFilter 模擬簡單光照效果
    構(gòu)造方法:
    LightingColorFilter(int mul, int add)
    參數(shù):
    int mul:用來和目標像素相乘
    int add:用來和目標像素相加
R = R * mul.R / 0xff + add.R  
G = G * mul.G / 0xff + add.G  
B = B * mul.B / 0xff + add.B  
  • PorterDuffColorFilter 作用是使用一個指定的顏色和一種指定的 PorterDuff.Mode 來與繪制對象進行合成
    構(gòu)造方法:
    PorterDuffColorFilter(int color, PorterDuff.Mode mode)
    參數(shù):
    int color:指定的顏色
    PorterDuff.Mode mode:繪制策略
  • ColorMatrixColorFilter 使用一個 ColorMatrix 來對顏色進行處理
    ColorMatrix:是一個4*5的矩形矩陣驶拱,通過計算將像素進行轉(zhuǎn)換。
1.3 Xfermode

Xfermode 以繪制的內(nèi)容作為源圖像沮趣,以 View 中已有的內(nèi)容作為目標圖像屯烦,選取一個 PorterDuff.Mode 作為繪制內(nèi)容的顏色處理方案坷随。

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); 使用時直接使用Xfermode 的子類PorterDuffXfermode就可以達到我們想要的效果房铭。

ps:注意其中透明區(qū)域的范圍

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市温眉,隨后出現(xiàn)的幾起案子缸匪,更是在濱河造成了極大的恐慌,老刑警劉巖类溢,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凌蔬,死亡現(xiàn)場離奇詭異露懒,居然都是意外死亡,警方通過查閱死者的電腦和手機砂心,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門懈词,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辩诞,你說我怎么就攤上這事坎弯。” “怎么了译暂?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵抠忘,是天一觀的道長。 經(jīng)常有香客問我外永,道長崎脉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任伯顶,我火速辦了婚禮囚灼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砾淌。我一直安慰自己啦撮,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布汪厨。 她就那樣靜靜地躺著赃春,像睡著了一般。 火紅的嫁衣襯著肌膚如雪劫乱。 梳的紋絲不亂的頭發(fā)上织中,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音衷戈,去河邊找鬼狭吼。 笑死,一個胖子當著我的面吹牛殖妇,可吹牛的內(nèi)容都是我干的刁笙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼谦趣,長吁一口氣:“原來是場噩夢啊……” “哼疲吸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起前鹅,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤摘悴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后舰绘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹂喻,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡葱椭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了口四。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孵运。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蔓彩,靈堂內(nèi)的尸體忽然破棺而出掐松,到底是詐尸還是另有隱情,我是刑警寧澤粪小,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布大磺,位于F島的核電站,受9級特大地震影響探膊,放射性物質(zhì)發(fā)生泄漏杠愧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一逞壁、第九天 我趴在偏房一處隱蔽的房頂上張望流济。 院中可真熱鬧,春花似錦腌闯、人聲如沸绳瘟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糖声。三九已至,卻和暖如春分瘦,著一層夾襖步出監(jiān)牢的瞬間蘸泻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工嘲玫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悦施,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓去团,卻偏偏與公主長得像抡诞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子土陪,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 系列文章之 Android中自定義View(一)系列文章之 Android中自定義View(二)系列文章之 And...
    YoungerDev閱讀 2,176評論 0 4
  • shader中文意思著色器昼汗,「著色器」不是 Android 獨有的,它是圖形領(lǐng)域里一個通用的概念旺坠,它和直接設(shè)置顏色...
    拙峰朽木閱讀 455評論 0 0
  • 上一篇 文章對自定義單一 View 進行了初步的介紹乔遮,對繪制的流程有了一個概念扮超,本篇將對 Paint 部分進行詳細...
    Kip_Salens閱讀 1,567評論 0 1
  • 其實想保持好身材,并沒有什么特別的秘密璧疗,無非是“管住嘴坯辩,邁開腿”,然而崩侠,常年堅持運動或者健康飲食的人漆魔,并非比比皆是...
    Ss琉璃閱讀 566評論 0 0
  • UDP協(xié)議在IP協(xié)議上增加了復(fù)用、分用和差錯檢測功能却音。UDP的特點: UDP報文格式 UDP協(xié)議分為首部字段和數(shù)據(jù)...
    FantJ閱讀 1,216評論 0 1