近期的需求 偶尔需要获取当前SurfaceView上渲染的内容视图,因为是通过网页端控制的,类似预览功能吧。百度了好久,没找到能用的,无意间发现了这个类PixelCopy.java,网上没什么介绍
安卓系统封装的一个类PixelCopy.java (frameworks\base\graphics\java\android\view\PixelCopy.java),里面已经都帮忙实现了相关的截图方法,只需要传入对应的参数即可。
下面是几个里面的方法
传SurfaceView 和 Surface 其实是一样的,还有一个就是可以传Window 类似普通View的截图实现,我这边主要用到SurfaceView,下面是我的实现
Bitmap mScreenBitmap = null;
public void screenshot(SurfaceView view){
//需要截取的长和宽
int outWidth = view.getWidth();
int outHeight = view.getHeight();
mScreenBitmap = Bitmap.createBitmap(outWidth, outHeight,Bitmap.Config.ARGB_8888);
PixelCopy.request(view, mScreenBitmap, new PixelCopy.OnPixelCopyFinishedListener() {
@Override
public void onPixelCopyFinished(int copyResult){
if (PixelCopy.SUCCESS == copyResult) {
onSuccessCallback(mScreenBitmap);
Log.i("gyx","SUCCESS ");
} else {
Log.i("gyx","FAILED");
// onErrorCallback()
}
}
}, new Handler());
}
亲测有效,源码是安卓8.0