广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    Android 倒影算法的实现代码

    2018-04-08 09:04:18 次阅读 稿源:互联网
    广告
    代码如下:

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

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告