最近の需要は、プレビュー機能と同様に Web ページを通じて制御されるため、現在の SurfaceView 上にレンダリングされたコンテンツ ビューを取得する必要がある場合があります。Baidu をずっと探していたのですが、使えそうなものが見つからず、たまたま見つけたのが PixelCopy.java というクラスで、ネット上にも紹介がありませんでした。
Android システムによってカプセル化されたクラス PixelCopy.java (frameworks\base\graphics\java\android\view\PixelCopy.java) は、関連するスクリーンショット メソッドの実現にすでに役立っており、対応するパラメーターを渡すだけで済みます。
内部にはいくつかのメソッドがあります
SurfaceViewとSurfaceを渡すのは実は同じで、もう一つは通常のViewと同じようにWindowのスクリーンショットを渡すというもので、ここでは主に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());
}
プロテストは有効、ソースコードは Android 8.0