1

我被困在一个让我发疯的简单问题上。在标准的 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);
    }
4

1 回答 1

2

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

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

在哪里 。是透明度。您可能希望像这样倾斜图像以获得阴影:

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

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

于 2011-05-09T21:34:32.107 回答