时间:2021/01/20
之前公司不允许csdn,笔记写在其它地方。最近整理过来
背景描述
AndroidR对比Android Q launcher功能
recentUI界面新增截屏和分享按钮:
1、入口:
packages/apps/Launcher3/quickstep/recents_ui_overrides/src/com/android/quickstep/views/OverviewActionsView.java
@Override
public void onClick(View view) {
if (mCallbacks == null) {
return;
}
int id = view.getId();
if (id == R.id.action_share) {
mCallbacks.onShare();
} else if (id == R.id.action_screenshot) {
mCallbacks.onScreenshot();
}
}
2、Android R recentUI界面taskview大小调整
packages/apps/Launcher3/quickstep/src/com/android/quickstep/BaseActivityInterface.java
private void calculateTaskSize(
Context context, DeviceProfile dp, float extraVerticalSpace, Rect outRect,
PagedOrientationHandler orientationHandler) {
Resources res = context.getResources();
final boolean showLargeTaskSize = showOverviewActions(context) ||
hideShelfInTwoButtonLandscape(context, orientationHandler);
final int paddingResId;
if (dp.isMultiWindowMode) {
paddingResId = R.dimen.multi_window_task_card_horz_space;
} else if (dp.isVerticalBarLayout()) {
paddingResId = R.dimen.landscape_task_card_horz_space;
} else if (showLargeTaskSize) {
paddingResId = R.dimen.portrait_task_card_horz_space_big_overview;
} else {
paddingResId = R.dimen.portrait_task_card_horz_space;
}
float paddingHorz = res.getDimension(paddingResId);
if (!orientationHandler.isLayoutNaturalToLauncher()) {
paddingHorz = Math.max(paddingHorz, getOverviewBottomItemsHeight(res) * 2);
}
float paddingVert = showLargeTaskSize
? 0 : res.getDimension(R.dimen.task_card_vert_space);
//通过调整边距,控制下面方法outRect矩形的宽高
//outRect这个矩形最终决定taskview显示的宽高
calculateTaskSizeInternal(context, dp, extraVerticalSpace, paddingHorz, paddingVert,
res.getDimension(R.dimen.task_thumbnail_top_margin), outRect);
}
private void calculateTaskSizeInternal(Context context, DeviceProfile dp,
float extraVerticalSpace, float paddingHorz, float paddingVert, float topIconMargin,
Rect outRect) {
float taskWidth, taskHeight;
Rect insets = dp.getInsets();
if (dp.isMultiWindowMode) {
WindowBounds bounds = SplitScreenBounds.INSTANCE.getSecondaryWindowBounds(context);
taskWidth = bounds.availableSize.x;
taskHeight = bounds.availableSize.y;
} else {
taskWidth = dp.availableWidthPx;
taskHeight = dp.availableHeightPx;
}
// Note this should be same as dp.availableWidthPx and dp.availableHeightPx unless
// we override the insets ourselves.
int launcherVisibleWidth = dp.widthPx - insets.left - insets.right;
int launcherVisibleHeight = dp.heightPx - insets.top - insets.bottom;
float availableHeight = launcherVisibleHeight
- topIconMargin - extraVerticalSpace - paddingVert;
float availableWidth = launcherVisibleWidth - paddingHorz;
float scale = Math.min(availableWidth / taskWidth, availableHeight / taskHeight);
float outWidth = scale * taskWidth;
float outHeight = scale * taskHeight;
// Center in the visible space
float x = insets.left + (launcherVisibleWidth - outWidth) / 2;
float y = insets.top + Math.max(topIconMargin,
(launcherVisibleHeight - extraVerticalSpace - outHeight) / 2);
outRect.set(Math.round(x), Math.round(y),
Math.round(x) + Math.round(outWidth), Math.round(y) + Math.round(outHeight));
}