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);
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鏡像模式儡炼;看下效果:
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ū)域的范圍