سؤال

أنا عالق في مشكلة بسيطة تقودني إلى المكسرات. في صور تراكب 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);
    }
هل كانت مفيدة؟

المحلول

سؤال جيد! أعتقد أن الحل سوف ينحرف الصورة على أنها متوازية. النظر في صورة دبوس خريطة تبدو مثل هذا:

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

أين . هو الشفافية. تريد أن تشوه الصورة مثل هذا الظل:

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

لاحظ أعلى وأسفل هي نفس العرض كما هو الحال في الصورة الأصلية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top