Search code examples
androidcanvasviewscreenshothardware-acceleration

Take proper screenshot


I would like to ask help. I want to take screenshot. This is working, but ImageView rounded corners are not rounded on the taken screenshots (and elevation shadows missing too). I used

imageView.setClipToOutline(true);

to make this work on the phone, but on the screenshots they are rectangular.

These are my screenshot utils:

public class ScreenShotUtils {

public static Bitmap screenShotFromCanvas(View view) {
    Bitmap bitmap = Bitmap.createBitmap(view.getWidth(),
            view.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    view.draw(canvas);
    return bitmap;
}

public static Bitmap screenShotFromDrawingCache(View view) {
    view.setDrawingCacheEnabled(true);
    view.buildDrawingCache();

    Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());

    view.destroyDrawingCache();
    view.setDrawingCacheEnabled(false);

    return bitmap;
}

Both method has the same result.

However i noticed, that if i turn the hardware acceleration off, the layout looks like the same as on the screenshots.

This is how it looks like after take screenshot: enter image description here

This is how it should be: enter image description here


Solution

  • Finally i solved my problem with MediaProjectionManager.