Android 倒影算法的实现代码

L1095086973

L1095086973

2016-02-19 09:37

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐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();
 }
}
展开更多 50%)
分享

猜你喜欢

Android 倒影算法的实现代码

编程语言 网络编程
Android 倒影算法的实现代码

android panellistview 圆角实现代码

编程语言 网络编程
android panellistview 圆角实现代码

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

android屏幕全屏的实现代码

编程语言 网络编程
android屏幕全屏的实现代码

android webview 简单浏览器实现代码

编程语言 网络编程
android webview 简单浏览器实现代码

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Android画图并保存图片的具体实现代码

编程语言 网络编程
Android画图并保存图片的具体实现代码

android ListView和GridView拖拽移位实现代码

编程语言 网络编程
android ListView和GridView拖拽移位实现代码

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win10预览版10532已知问题汇总

Win10预览版10532已知问题汇总

MySQL 有输入输出参数的存储过程实例

MySQL 有输入输出参数的存储过程实例
下拉加载更多内容 ↓