2009-12-17 5 views
1

Je suis coincé sur un problème simple qui me rend fou. Dans les images de superposition Android MapView standard, une ombre leur est automatiquement dessinée lorsque vous appelez la méthode drawAt. Je veux recréer le même effet d'ombre, mais je ne suis pas sûr de savoir comment faire en sorte que la version d'ombre de l'image (qui est dessinée séparément de l'image principale) s'aligne correctement avec l'image principale.Comment puis-je dessiner une version 'shadow' d'une image?

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

La question n'est pas claire et apparemment pleine de fautes d'orthographe, ce qui la rend plus difficile à comprendre. Précisez s'il vous plaît. – pavium

+0

sorry.Ive l'ai édité. Je veux seulement obtenir deux images à joindre ou une connexion, de sorte que pour produire l'effet d'ombre. comme vous le savez mon code a deux images, mais l'un à l'écart de l'autre. comment se rapprocher les uns des autres. – pengwang

Répondre

2

Belle question! Je pense que la solution sera biaiser l'image comme un parallélogramme. Considérons une image d'une broche de carte qui ressemble à quelque chose comme ceci:

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

Où. est la transparence. Vous voulez biaiser l'image comme celui-ci pour l'ombre:

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

Notez que le haut et le bas sont la même largeur que dans l'image originale.

Questions connexes