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






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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值