• 로그인 함 해보끄나?

  • Sarangnamu.net June 17, 2003
    Home Login Profile Study Open Project Q&A Google Code
    api level 28 에서 getDrawingCache 가 deprecated 되었다.
    view 를 캡쳐할때 사용하던 api 였는데 api level 28 부터는 deprecated 되서 대체할 만한게 무엇인지 찾아보다가
    
    PixelCopy 또는 view 자체를 canvas 에 그리는 방법 이렇게 두 가지의 선택권이 있는걸로 인지 했고 
    PixelCopy 의 경우 최신 버전에서만 사용할 수 있다보니 당장 사용하기는 애매한 감이 있어 view 에 canvas 를 그려 capture 하는 식으로 하는걸로 결정 했다. 
    
    그렇게 나온 코드는 아래와 같고 
    public static void capture(@NonNull ScreenshotParams params) {
            final View view = params.view;
            final int w     = view.getWidth();
            final int h     = view.getHeight();
    
            view.clearFocus();
            view.setPressed(false);
            view.invalidate();
    
            final Bitmap buffer = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
            final Canvas canvas = new Canvas(buffer);
            final Bitmap watermark = params.waterMark;
    
            view.draw(canvas);
    
            if (watermark != null) {
                final Canvas watermarkCanvas = new Canvas(buffer);
                final int offsetx = w - watermark.getWidth();
                final int offsety = h - watermark.getHeight();
    
                canvas.drawBitmap(watermark, offsetx, offsety, new Paint());
            }
    
            String savePath;
            if (TextUtils.isEmpty(params.resourcePath)) {
                savePath = mConfigDelegate.getConfig(IConfigDelegate.SCREENSHOT_PATH);
            } else {
                savePath = params.resourcePath;
            }
    
            File fp = new File(savePath);
            if (!fp.exists()) {
                fp.mkdirs();
            }
    
            File bmpFp = new File(savePath, params.fileName);
            try {
                OutputStream os = new FileOutputStream(bmpFp);
                buffer.compress(Bitmap.CompressFormat.PNG, 90, os);
                os.close();
    
                if (mLog.isDebugEnabled()) {
                    mLog.debug("SCREENSHOT PATH : " + bmpFp.getAbsolutePath());
                }
    
                if (params.listener != null) {
                    params.listener.onResult(OnResultListener.TRUE, bmpFp.getAbsolutePath());
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
    
                if (params.listener != null) {
                    params.listener.onResult(OnResultListener.FALSE, e.getMessage());
                }
            } catch (IOException e) {
                e.printStackTrace();
    
                if (params.listener != null) {
                    params.listener.onResult(OnResultListener.FALSE_2, e.getMessage());
                }
            } finally {
                buffer.recycle();
    
                if (watermark != null) {
                    watermark.recycle();
                }
            }
        }
    
    
    혹시 모르니 PixcelCopy 의 구현 부분도 대략적 코드를 남긴다. 
    
    
        private static void capturePixelCopy(@NonNull ScreenshotParams params) {
    //        int offsetX = w - waterMark.getWidth();
    //        int offsetY = h - waterMark.getHeight();
    
    //        Window window = ((Activity) view.getContext()).getWindow();
    //
    //        view.clearFocus();
    //        view.setPressed(false);
    //
    //        Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
    //        int[] windowSize = new int[2];
    //
    //        view.getLocationInWindow(windowSize);
    //
    //        try {
    //            PixelCopy.request(window, new Rect(windowSize[0], windowSize[1],
    //                            windowSize[0] + view.getWidth(),
    //                            windowSize[1] + view.getHeight()),
    //                    bitmap, copyResult -> {
    //                        if (copyResult == PixelCopy.SUCCESS) {
    //
    //                        }
    //                    }, new Handler());
    //        } catch (Exception e) {
    //            mLog.error("ERROR: " + e.getMessage());
    //        }
        }
    

    Comment


    입력하3 1542474037



    Locations of visitors to this page