android.graphic.Shaderクラスについて
今回SuperdryColorPickerを作るにあたってぶちあたったShaderクラス。グラデーションとか陰影をつけるクラスで、以下のサブクラスがあります。
- BitmapShader
- ComposeShader
- LinearGradient
- RadialGradient
- SweepGradient
Shaderに関係するものとして以下の引数があります。
- Shader.TileMode
- PorterDuff.Mode
- Xfermode
Shader.TileMode
どういう加工をするか
Shader.TileMode | CLAMP | オリジナルの画像の外側にシェーダが描画される場合エッジカラーをコピーする |
Shader.TileMode | MIRROR | シェーダ画像が水平垂直方向に鏡像で繰り返される |
Shader.TileMode | REPEAT | シェーダ画像が水平垂直方向に繰り返される |
PorterDuff.Mode
どういう合成をするか。このあたりはAPI Demosのgraphics-Xfermodeをみれば一目瞭然かと。Xfermodeのテンプレートである。
Xfermode
PorterDuff.Modeにないモードで合成したい場合Xfermodeを使う。Xfermodeは描画パイプラインへカスタマイズされた「変換モード」を実装するときに呼ばれるオブジェクトの基底クラス。事前に定義されたサブクラスを列挙型Modesで特定でき、Create(Modes)でインスタンスを返す。Paintにxfermodeを設定すると、オブジェクトはxfermodeが適用されたPaintで描画される。
BitmapShader
bitmapに対しシェーダをかけるメソッドです
public BitmapShader (Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY);
bitmap | 加工する画像 |
tileX | 水平方向にどういう加工をするか |
tileY | 垂直方向にどういう加工をするか |
ComposeShader
2つのシェーダをモードにあわせて合成するメソッドです。
public ComposeShader (Shader shaderA, Shader shaderB, Xfermode mode) public ComposeShader (Shader shaderA, Shader shaderB, PorterDuff.Mode mode)
この場合shader Aがdst、shader Bがsrcとなる。modeがnullの場合は、SRC_OVERが適用されます。
LinearGradient
線状のグラデーションを書くシェーダ。
//複数色 LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile) //二色 LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)
引数の意味は以下のとおり
x0, y0 | 始点 |
x1, y1 | 終点 |
color0 | 始点の色 |
color1 | 終点の色 |
colors[] | グラデーション配列 |
positions[] | 位置情報普通null) |
RadialGradient
中心点と半径から円形のグラデーションを描くシェーダ(グラデーション方向は中心からエッジに向かって)。
RadialGradient(float x, float y, float radius, int[] colors, float[] positions, Shader.TileMode tile) RadialGradient(float x, float y, float radius, int color0, int color1, Shader.TileMode tile)
引数の意味は以下のとおり
x, y | 中心点 |
radius | 半径 |
color0 | 中心点の色 |
color1 | エッジの色の色 |
colors[] | グラデーション配列 |
SweepGradient
中心点と半径から円形のグラデーションを描くシェーダ(グラデーション方向は円弧に沿って)。
SweepGradient(float cx, float cy, int[] colors, float[] positions) SweepGradient(float cx, float cy, int color0, int color1)
引数の意味は以下のとおり
x, y | 中心点 |
color0 | 始点の色 |
color1 | 終点の色 |
colors[] | グラデーション配列 |