zoukankan      html  css  js  c++  java
  • Android 倒影实现算法【搜集】

    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 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();
     }

    }

  • 相关阅读:
    获取系统信息
    Spring下获取项目根路径--good
    Java 获取webapp,Root,classpath,项目等路径工具类
    并发与并行的区别
    享元模式的简单使用
    mysql 分库分表(水平切割和垂直切割)
    sql随机筛选几条记录
    创建表
    sql字段组合唯一
    Jobject 使用
  • 原文地址:https://www.cnblogs.com/jiezzy/p/2599716.html
Copyright © 2011-2022 走看看