http://ysl-paradise.blogspot.com/2009/12/ii.html

public class MirrorView extends View {
Paintm_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();
}

}

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Java必踩的坑之方法中形参、实参传递
  2. 怎么做跨境电商?外贸完整流程分享
  3. Android(安卓)Camera对焦相关
  4. android 通信机制 socket
  5. Android(安卓)权限的一些细节
  6. android 启动模式之分析
  7. android第三天早:游戏画图基础
  8. Android之Broadcast, BroadcastReceiver(
  9. Android(安卓)Systrace
  10. android 模拟器 使用SD卡