图片倒影效果实现,图片倒影实现,package my.y
分享于 点击 2197 次 点评:275
图片倒影效果实现,图片倒影实现,package my.y
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[] src = {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://byrx.net
用户点评