Android SufaceView 截图

首先错误的现象是你的代码显示不出来截图,可能显示的是黑色也可能是你父控件的背景的颜色,方正结果就是出不来截图。

说一下原理吧,SufaceView有双缓冲机制,有个front buffer,一个back buffer也就是说有两个图,一个在前面界面显示,一个在后面准备,front buffer显示,back buffer就准备图片,这样就变得很快了是不是。我们一直截图获取得到的黑屏或者背景色,就是应为我们没有取到front buffer而是取到back buffer。

我们直接截图按照一般截图,因为一般的界面是静态的,所以解决方法如下:

OnClick中

	Bitmap bitmap=MyView.getBitmap();
SufaceView中

	public Bitmap getBitmap(){
    		Bitmap bitmap = Bitmap.createBitmap(GlobalDef.RES_DISPLAY_WIDTH, GlobalDef.RES_DISPLAY_HEIGHT, Bitmap.Config.ARGB_8888);
    		Canvas canvas = new Canvas(bitmap);
		
		//下面是我的代码,你的就要换成你的代码
		//换成你SufaceView Ondraw的代码就可以
		//理解:holder.lockCanvas以后holder.unlockCanvasPost之前的代码
		//holder.lockCanvas是获取到的front buffer的图像也就是我们要显示的,所以我们这里重新画一遍在我们new
		的canvas中。
Paint paint = new Paint(); paint.setAntiAlias(true);// 抗锯齿 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); canvas.drawPaint(paint); canvas.drawBitmap(this.bitmap, new Rect(0, 0, GlobalDef.RES_DISPLAY_WIDTH, GlobalDef.RES_DISPLAY_HEIGHT), new RectF( 0f, 0f, GlobalDef.RES_DISPLAY_WIDTH, GlobalDef.RES_DISPLAY_HEIGHT), null);//lsh return bitmap;}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值