画像のバックグラウンドを描画
以下は他人から引用した文章である
http://ysl-paradise.blogspot.com/2009/12/ii.html
余計なことは言わない
Android図面座標系で予め設定されている原点は左上隅で、X軸を右にするとますます大きな正の値になりますが、Y軸を下にすると、ますます大きな正の値になります.垂直に反転する画像を描くには、図面座標系全体を垂直に反転します.Androidでは、どうすればいいですか?答えはcanvas.scale(1.0 f,-1.0 f)です.簡単でしょう.scale()式に負の値を与えると、対応する軸を反転させることができます.
Photoshopでは、ミラーの特効を作る第2のステップは、この反転した画像に、グレーから黒へのグラデーションmaskを追加することです.
Androidでグラデーションを描くには、必ずLinearGradientというカテゴリを使わなければなりません.背景図にmaskを付けるには、PaintのsetXfermode()式を参照してください.Init()という関数は,灰から黒への漸層maskを生成するm_を担当する.paint物件.
http://ysl-paradise.blogspot.com/2009/12/ii.html
余計なことは言わない
private void
_Init()
{
m_paint = new Paint(Paint.ANTI_ALIAS_FLAG);
LinearGradient lg = new LinearGradient(
0, 0, 0, m_nShadowH,
0xB0FFFFFF, 0x00000000,
Shader.TileMode.CLAMP);
m_paint.setShader(lg);
m_paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
}
@Override protected void
onDraw(Canvas canvas)
{
super.onDraw(canvas);
int nX = 0;
int nY = 20;
_DrawNormalImg(canvas, nX, nY);
_DrawMirror(canvas, nX, nY);
}
private void
_DrawNormalImg(Canvas canvas, int nX, int nY)
{
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.translate(nX, nY);
m_dw.draw(canvas);
canvas.restore();
}
private void
_DrawMirror(Canvas canvas, int nX, int nY)
{
int nW = m_dw.getIntrinsicWidth();
int nH = m_dw.getIntrinsicHeight();
///////////////////////////////////
//draw mirror image
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.scale(1.0f, -1.0f);
canvas.translate(nX, -(nY + nH * 2));
canvas.clipRect(0, nH, nW, nH - m_nShadowH);
m_dw.draw(canvas);
canvas.restore();
//////////////////////////////
//draw mask
canvas.save();
canvas.translate(nX, nY + nH);
canvas.drawRect(0, 0, nW, m_nShadowH, m_paint);
canvas.restore();
}
Android図面座標系で予め設定されている原点は左上隅で、X軸を右にするとますます大きな正の値になりますが、Y軸を下にすると、ますます大きな正の値になります.垂直に反転する画像を描くには、図面座標系全体を垂直に反転します.Androidでは、どうすればいいですか?答えはcanvas.scale(1.0 f,-1.0 f)です.簡単でしょう.scale()式に負の値を与えると、対応する軸を反転させることができます.
Photoshopでは、ミラーの特効を作る第2のステップは、この反転した画像に、グレーから黒へのグラデーションmaskを追加することです.
Androidでグラデーションを描くには、必ずLinearGradientというカテゴリを使わなければなりません.背景図にmaskを付けるには、PaintのsetXfermode()式を参照してください.Init()という関数は,灰から黒への漸層maskを生成するm_を担当する.paint物件.