绘制图像倒影

一下是引自别人的文章

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.0f, -1.0f)。很簡單吧,沒想到給 scale() 函式一個負值,就可以翻轉相對應的軸。

在 Photoshop 中,做鏡像特效的第二步是要對這翻轉的圖片,加個由灰到黑的漸層 mask。

在 Android 中,要畫漸層色,那就一定得用 LinearGradient 這個類別。至於要對背景圖加上個 mask,就請參考一下 Paint 的 setXfermode() 函式。_Init() 這個函式,就是負責生成一個由灰到黑漸層 mask 的 m_paint 物件。



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值