標籤:android shader
Shader
Shader是一個基類,表示在繪製期間顏色的水平跨度
它的子類被嵌入在Paint中使用,調用paint.setShader(shader)。
除Bitmap外的其它對象,使用該Paint進行繪製時,將從shader中獲得顏色
Shader.TileMode 渲染模式
public enum TileMode { CLAMP (0), REPEAT (1), MIRROR (2); TileMode(int nativeInt) { this.nativeInt = nativeInt; } final int nativeInt;} CLAMP:如果超出原始bounds(即原圖的邊界),則重複邊緣上的color
REPEAT:重複bitmap
MIRROR:重複bitmap,與REPEAT不同的時,它是鏡像重複,即:反向重複
Shader 子類:
BitmapShader (android.graphics) 映像渲染
ComposeShader (android.graphics) 組合渲染
LinearGradient (android.graphics) 線性渲染
RadialGradient (android.graphics) 環形渲染
SweepGradient (android.graphics) 掃描渲染
BitmapShader
new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.MIRROR); 以某個渲染模式 進行 映像渲染
ComposeShader
new ComposeShader(shaderA, shaderB, PorterDuff.Mode.DST); 組合兩種渲染效果,以PorterDuff.Mode進行組合
LinearGradient
new LinearGradient(0, 0, bitmap.getWidth(), bitmap.getHeight(), 0x470000ff,0xefffff00, Shader.TileMode.CLAMP);
在一定地區內,以某種渲染模式,進行兩種顏色間的線性變化
new LinearGradient(0, 0, bitmap.getWidth(), bitmap.getHeight(), new int[]{0xffabc777, 0x2300ff00, 0x470000ff, 0xefffff00}, new float[]{0.1f, 0.3f, 0.5f, 1.0f}, Shader.TileMode.CLAMP);
在一定地區內,以某種渲染模式,進行一組顏色間的線性變化,變化的位置由float數組決定。要求int數組和float數組,長度一致
RadialGradient
以點(x,y),半徑為r,進行環形渲染
new RadialGradient(w/2, h/2, Math.min(w, h) /2, 0xddff00f0, 0xffabc777, Shader.TileMode.REPEAT);
new RadialGradient(w/2, h/2, Math.min(w, h) /2, new int[]{0xddff0000, 0x2300ff00, 0x470000ff, 0xffabc777}, new float[]{0.1f, 0.3f, 0.5f, 1.0f}, Shader.TileMode.CLAMP);
SweepGradient
以點(x,y),進行掃描渲染
new SweepGradient(w/2, h/2, 0xddff00f0, 0xffabc777);
new SweepGradient(w, h, new int[]{0xffff0000, 0xff00ff00, 0xff0000ff, 0xffabc777, 0xffee00ee}, new float[]{0.2f, 0.4f, 0.6f, 0.75f, 1f});
PorterDuff.Mode
canvas.drawBitmap(mDstB, 0, 0, paint);//先繪製目標paint.setXfermode(sModes[i]);// 使用modecanvas.drawBitmap(mSrcB, 0, 0, paint);//再繪製源paint.setXfermode(null);//清除mode
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android Shader 顏色、映像渲染