问题:
下拉状态栏,点击长截屏快捷键,图片显示不全。如图:
分析:
主要涉及四个类:
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中长截屏流程。按下音量键+开机键截图,可以参考下面文章: