我遇到了一个让我疯狂的简单问题。在标准的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);
}
答案 0 :(得分:2)
好问题!我认为解决方案会将图像倾斜为平行四边形。考虑一个看起来像这样的地图图钉的图像:
..X..
.XXX.
..X..
..|..
..|..
..|..
哪里。是透明度。您可能希望像阴影一样扭曲图像:
..X..
.XXX.
..X..
..|..
..|..
..|..
请注意,顶部和底部的宽度与原始图像中的宽度相同。