如何绘制图像的“阴影”版本?

时间:2009-12-17 08:53:13

标签: android shadow translate

我遇到了一个让我疯狂的简单问题。在标准的Android MapView叠加图中,当您调用drawAt方法时,图像会自动为它们绘制阴影。我想重新创建相同的阴影效果,但我不确定如何使图像的阴影版本(与主图像分开绘制)与主图像正确对齐。

private static class SampleView extends View {
    private Drawable mDrawable;
    private int mMarkerXOffset;
    private int mMarkerYOffset;

    public SampleView(Context context) {
        super(context);

        mDrawable = context.getResources().getDrawable(R.drawable.icon); 
        mDrawable.setBounds(0, 0, mDrawable.getIntrinsicWidth(), mDrawable.getIntrinsicHeight()); 

        mMarkerXOffset = (mDrawable.getIntrinsicWidth() / 2);
        mMarkerYOffset = mDrawable.getIntrinsicHeight();
    }

    private void DrawNormalImg(Canvas canvas, int nX, int nY)  {   
        canvas.save(Canvas.MATRIX_SAVE_FLAG);   
        canvas.translate(nX, nY);   
        mDrawable.draw(canvas);   
        canvas.restore();   
    }   

    private void DrawShadowImg(Canvas canvas, int nX, int nY)  { 
        canvas.save(Canvas.MATRIX_SAVE_FLAG);

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

        canvas.translate(nX,nY);   
        canvas.skew(-0.9F, 0.0F);   
        canvas.scale(1.0F, 0.5F);   

        mDrawable.draw(canvas);   
        mDrawable.clearColorFilter();   

        canvas.restore();   
    }  

    @Override protected void onDraw(Canvas canvas) {
        int nX = 100;   
        int nY = 50;   

        canvas.drawColor(Color.WHITE);

        DrawShadowImg(canvas, nX, nY);   
        DrawNormalImg(canvas, nX, nY);
    }

1 个答案:

答案 0 :(得分:2)

好问题!我认为解决方案会将图像倾斜为平行四边形。考虑一个看起来像这样的地图图钉的图像:

..X..
.XXX.
..X..
..|..
..|..
..|..

哪里。是透明度。您可能希望像阴影一样扭曲图像:

     ..X..
    .XXX.
   ..X..
  ..|..
 ..|..
..|..

请注意,顶部和底部的宽度与原始图像中的宽度相同。

相关问题