Android는 SurfaceView에서 렌더링된 콘텐츠의 스크린샷을 실시간으로 가져옵니다.

        최근 수요는 미리보기 기능과 유사하게 웹페이지를 통해 제어되기 때문에 현재 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입니다.

 

추천

출처blog.csdn.net/weixin_35649059/article/details/119651015