- package my.yaner.android.component.animation;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.graphics.LinearGradient;
- import android.graphics.Matrix;
- import android.graphics.Paint;
- import android.graphics.PorterDuff;
- import android.graphics.PorterDuffXfermode;
- import android.graphics.Shader;
- import android.graphics.drawable.BitmapDrawable;
- import android.graphics.drawable.Drawable;
- import android.util.AttributeSet;
- import android.view.View;
- public class MirrorView extends View {
- Paint m_paint;
- int m_nShadowH;
- public Drawable m_dw;
- Bitmap m_bitmap;
- Matrix mMatrix;
- int shadowHeight;
- public MirrorView(Context context, Bitmap bitmap) {
- super(context);
- m_bitmap = bitmap;
- init();
- }
- private void init() {
- 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, 0X000000, Shader.TileMode.CLAMP);
- m_paint.setShader(lg);
- m_paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
- mMatrix = new Matrix();
- }
- public void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- int nX = 0;
- int nY = 0;
- drawNormallmg(canvas, nX, nY);
- drawMirror(canvas, nX, nY);
- }
- private void drawMirror(Canvas canvas, int nX, int nY) {
- int nW = m_dw.getIntrinsicWidth();
- int nH = m_dw.getIntrinsicHeight();
- shadowHeight = nH / 2;
- float[] src1= {0, nH, nW, nH, nW, nH - m_nShadowH, 0, nH - m_nShadowH};
- float[] dst = {0, nH, nW, nH, nW, shadowHeight, 0, shadowHeight};
- canvas.save();
- mMatrix.setPolyToPoly(src, 0, dst, 0, src.length >> 1);
- canvas.concat(mMatrix);
- 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();
- canvas.save();
- canvas.translate(nX, nY + nH);
- canvas.drawRect(0, 0, nW, m_nShadowH, m_paint);
- canvas.restore();
- canvas.restore();
- }
- private void drawNormallmg(Canvas canvas, int nX, int nY) {
- canvas.save(Canvas.MATRIX_SAVE_FLAG);
- canvas.translate(nX, nY);
- m_dw.draw(canvas);
- canvas.restore();
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/141120137165.html
来源: http://www.codesnippet.cn/detail/141120137165.html