Как нарисовать «теневую» версию изображения?

1

Я застрял в простой проблеме, которая сводит меня с ума. В стандартном наложении наложения MapView 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
    Вопрос неясен и, по-видимому, полон орфографических ошибок, которые усложняют понимание. Просьба уточнить.
  • 0
    извините. Я его отредактировал. я только хочу получить два изображения, чтобы присоединиться или соединиться, чтобы произвести эффект тени. как вы знаете мой код имеет два изображения, но одно далеко от другого. как близко друг к другу.
Теги:
shadow
translate

1 ответ

2
Лучший ответ

Хороший вопрос! Я думаю, что решение будет искажать изображение как параллелограмм. Рассмотрим изображение вывода карты, которое выглядит примерно так:

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

Где. является прозрачностью. Вы хотели бы исказить изображение, подобное этому для тени:

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

Обратите внимание, что верхняя и нижняя стороны имеют ту же ширину, что и в исходном изображении.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню