首先错误的现象是你的代码显示不出来截图,可能显示的是黑色也可能是你父控件的背景的颜色,方正结果就是出不来截图。
说一下原理吧,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;}