您的位置:首页 > 移动开发 > Android开发

android画出图片阴影!!!!!!!!!!!!!!

2012-09-18 15:48 288 查看












android画出图片阴影

void drawAt(Canvas canvas, Drawable drawable, int x, int y, boolean shadow)这个函数是Overlay具有的,当我们要在地图上作标记时候希望有阴影效果,就在draw中使用此函数即可,使shadow为false.下面是此函数的具体实现。

protected static void 

drawAt(Canvas canvas, Drawable drawable, int x, int y, boolean shadow)

{

  ...

  if (shadow)

    drawable.setColorFilter(0x7F000000, PorterDuff.Mode.SRC_IN);

  canvas.save();

  canvas.translate(x, y);

  if (shadow) {

    canvas.skew(-0.9F, 0.0F);

    canvas.scale(1.0F, 0.5F);

  }

  drawable.draw(canvas);

  if (shadow)

    drawable.clearColorFilter();

  canvas.restore();

}

@Override protected void 

onDraw(Canvas canvas)

{

  super.onDraw(canvas);

  int nX = 100;

  int nY = 50;

  _DrawShadowImg(canvas, nX, nY);

  _DrawNormalImg(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

_DrawShadowImg(Canvas canvas, int nX, int nY)

{

  canvas.save(Canvas.MATRIX_SAVE_FLAG);

  m_dw.setColorFilter(0x7f000000, PorterDuff.Mode.SRC_IN);

  canvas.translate(nX, nY);

  canvas.skew(-0.9F, 0.0F);

  canvas.scale(1.0F, 0.5F);

  m_dw.draw(canvas);

  m_dw.clearColorFilter();

  canvas.restore();

}

_DrawShadowImg() 就是负责绘制阴影效果的函数。

这个函数主要就是运用 matrix与drawable 的 color filter 這两个功能。首先是 m_dw.setColorFilter(),將整个力道睥颜色都转成半透明的黑色。接着canvas.translate()将卒标第原点移到nX, nY 的位置,而 canvas.skew() 与 canvas.scale()则是将卒标系做个经轴方向的倾斜与y轴方向的大小压缩,最后,调用m_dw.draw() 把图片画出来,阴影效果实现。

from: http://hi.baidu.com/ktscrdjuhcgltuf/item/9a605fbe33a17bf162388ed4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android matrix filter