画像のバックグラウンドを描画

2606 ワード

以下は他人から引用した文章である
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物件.
绘制图像倒影