recentUI截屏、taskview大小调整

时间: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));
}

猜你喜欢

转载自blog.csdn.net/a396604593/article/details/129796693
今日推荐