Copy Code code as follows:
public class MirrorView extends View {
Paint M_paint;
int m_nshadowh;
Drawable M_dw;
Bitmap M_bitmap;
Xxxx
Matrix Mmatrix;
int shadowheight;
Public MirrorView (context, Bitmap Bitmap) {
Super (context);
M_bitmap = bitmap;
_init ();
TODO auto-generated Constructor stub
}
private void _init () {
M_dw = new Bitmapdrawable (Bitmapfactory.decoderesource (Getresources (), R.drawable.icon));
M_dw = new Bitmapdrawable (M_BITMAP);
M_dw.setbounds (0,0,m_dw.getintrinsicwidth (), M_dw.getintrinsicheight ());
M_NSHADOWH = M_dw.getintrinsicheight ()/1;
M_paint = new Paint (Paint.anti_alias_flag);
LinearGradient lg = new LinearGradient (0, 0, 0, M_NSHADOWH, 0XB0FFFFFF, 0x00000000, Shader.TileMode.CLAMP);
M_paint.setshader (LG);
M_paint.setxfermode (New Porterduffxfermode (PorterDuff.Mode.MULTIPLY));
Xxxx
Mmatrix = new Matrix ();
}
@Override
public void OnDraw (Canvas Canvas) {
Super.ondraw (canvas);
int NX = 0;
int NY = 0;
_drawnormalimg (Canvas, NX, NY);
_drawmirror (Canvas, NX, NY);
}
private void _drawnormalimg (Canvas Canvas, int nX, int nY) {
Canvas.save (Canvas.matrix_save_flag);
Canvas.translate (NX, NY);
M_dw.draw (canvas);
Canvas.restore ();
}
private void _drawmirror (Canvas Canvas, int nX, int nY) {
int nW = M_dw.getintrinsicwidth ();
int nH = M_dw.getintrinsicheight ();
U.dout ("nw=" +nw+ ", nh=" +NH);
Xxxx
SHADOWHEIGHT=NH/2;
Xxxx
Float[] src={0, NH, NW, NH, NW,NH-M_NSHADOWH, 0, NH-M_NSHADOWH};
Float[] dst={0, NH, NW, NH,NW, shadowheight, 0, shadowheight};
Xxxx
Canvas.save ();
Mmatrix.setpolytopoly (SRC, 0, DST, 0, src.length >> 1);
Canvas.concat (Mmatrix);
Draw Mirror Image
Canvas.save (Canvas.matrix_save_flag);
Canvas.scale (1.0f, -1.0f);
Canvas.translate (NX,-(NY + NH * 2));
Canvas.cliprect (0, NH, NW, NH-M_NSHADOWH);
M_dw.draw (canvas);
Canvas.restore ();
Draw Mask
Canvas.save ();
Canvas.translate (NX, NY + NH);
Canvas.drawrect (0, 0, NW, M_NSHADOWH, M_paint);
Canvas.restore ();
Xxxx
Canvas.restore ();
}
}