andoid9 长截屏图片显示不全

问题: 

下拉状态栏,点击长截屏快捷键,图片显示不全。如图:

分析:

主要涉及四个类:

frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java

frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java

frameworks/base/core/java/android/app/LongScreenshotUtil.java

frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/CompareUtils.java

TakeScreenshotService与LongScreenshotUtil之间有Messager

只要实现是GlobalScreenshot类,CompareUtils是工具类

代码流程:

点击长截屏:
btnScrollMode.setOnClickListener(){

GlobalScreenshot.startLongscreenshot();

LongSceenshotUtil.mReceiveFromServiceHandler.START_LONG_SCREENSHOT
LongSceenshotUtil.takeLongscreenshot();;

GlobalScreenshot.takeLongscreenshot();
GlobalScreenshot .takeLongscreenshot(final Context context, final View decor);
LongSceenshotUtil.startScroll();

                                                    .startScroll();
LongSceenshotUtil.ScrollController.doScroll();
LongSceenshotUtil.ScrollController.sendScrollMessage(int scrollDistance)
LongSceenshotUtil.notifyUpdateLongScreenshot(int scrollDistance);

TakeScreenshotService.mHandler.UPDATE_LONG_SCREENSHOT
GlobalScreenshot.updateLongScreenshot(final int overlayViewsTop, final int scrollDistance);

保存图片:
GlobalScreenshot.saveAndShowLongScreenShot();
                                AsyncTask .doInBackground();
  GlobalScreenshot.savaBitmapToFile(Bitmap bitmap)-> getCapturedBitmap()->mergeBitmaps(List<Bitmap> bitmaps)

问题原因:

这手机是个小屏幕,截图时去掉的bottom值太大

解决方案:

针对该项目,添加一个参数,设置Bottom值为96。

注:该96就是手机导航栏高度,因这里之前就是写死的,我也写死。

也可以动态获取导航栏的高度,方法如下:

    private int getNavigationBarHeight(Context context) {
        int result = 0;
        int resourceId = context.getResources().getIdentifier("navigation_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = context.getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }

这是SystemUI中长截屏流程。按下音量键+开机键截图,可以参考下面文章:

https://blog.51cto.com/u_16099331/11066634

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值