Android 11.0 Launcher3 Folder 去掉背景

文章讲述了如何通过修改Android11.0桌面系统Launcher3应用中FolderAnimationManager类的代码,特别是将文件夹背景的透明度设置为0,从而实现去除文件夹打开时的白色模糊背景,达到透明效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)需求:Android 11.0 桌面系统默认的文件夹,打开文件夹后,文件夹会有一个白色模糊的背景色,显得不好看,需要把这背景色去掉.

(2)涉及代码路径:

packages/apps/Launcher3/src/com/android/launcher3/folder/FolderAnimationManager.java

(3)核心代码分析

public class FolderAnimationManager {

    private static final int FOLDER_NAME_ALPHA_DURATION = 32;

    private Folder mFolder;
    private FolderPagedView mContent;
    private GradientDrawable mFolderBackground; //文件夹背景

    private FolderIcon mFolderIcon;            //桌面文件夹icon
    private PreviewBackground mPreviewBackground; 桌面文件夹图标icon的背景
    ......

这里的   private GradientDrawable mFolderBackground 就是桌面文件夹打开后,设置文件夹的背景.

 /**
     * Prepares the Folder for animating between open / closed states.
     */
    public AnimatorSet getAnimator() {
     ......

 // Set up the Folder background.
        final int finalColor = ColorUtils.setAlphaComponent(
                Themes.getAttrColor(mContext, R.attr.folderFillColor), 255);//设置背景的颜色 和 透明度
        final int initialColor = setColorAlphaBound(
                finalColor, mPreviewBackground.getBackgroundAlpha());
        mFolderBackground.mutate();
        mFolderBackground.setColor(mIsOpening ? initialColor : finalColor);//根据文件夹打开和关闭的状态来确定背景颜色

    ......
//下面就是文件夹打开和关闭的动画

  play(a, getAnimator(mFolder, View.TRANSLATION_X, xDistance, 0f));
        play(a, getAnimator(mFolder, View.TRANSLATION_Y, yDistance, 0f));
        play(a, getAnimator(mFolder.mContent, SCALE_PROPERTY, initialScale, finalScale));
        play(a, getAnimator(mFolder.mFooter, SCALE_PROPERTY, initialScale, finalScale));
        play(a, getAnimator(mFolderBackground, "color", initialColor, finalColor));
        play(a, mFolderIcon.mFolderName.createTextAlphaAnimator(!mIsOpening));
        play(a, getShape().createRevealAnimator(
                mFolder, startRect, endRect, finalRadius, !mIsOpening));
        // Fade in the folder name, as the text can overlap the icons when grid size is small.
        mFolder.mFolderName.setAlpha(mIsOpening ? 0f : 1f);
        play(a, getAnimator(mFolder.mFolderName, View.ALPHA, 0, 1),
                mIsOpening ? FOLDER_NAME_ALPHA_DURATION : 0,
                mIsOpening ? mDuration - FOLDER_NAME_ALPHA_DURATION : FOLDER_NAME_ALPHA_DURATION);

上面代码中的 final int finalColor = ColorUtils.setAlphaComponent(
                Themes.getAttrColor(mContext, R.attr.folderFillColor), 255);//设置背景的颜色 和 透明度

就是定义了背景填充的颜色和透明度,这里的透明度是255,透明度越大,就越不透明,即 0 为透明; 255为完全不透明,所以,可以通过修改透明度来去掉背景即可.

(4)最终修改代码:

 /**
     * Prepares the Folder for animating between open / closed states.
     */
    public AnimatorSet getAnimator() {
     ......

 // Set up the Folder background.

//        final int finalColor = ColorUtils.setAlphaComponent(
//                Themes.getAttrColor(mContext, R.attr.folderFillColor), 255);//设置背景的颜色 和 透明度

//add by zc,把透明度设置为 0
final int finalColor = ColorUtils.setAlphaComponent(
                Themes.getAttrColor(mContext, R.attr.folderFillColor), 0);

//end by zc

        final int initialColor = setColorAlphaBound(
                finalColor, mPreviewBackground.getBackgroundAlpha());
        mFolderBackground.mutate();
        mFolderBackground.setColor(mIsOpening ? initialColor : finalColor);//根据文件夹打开和关闭的状态来确定背景颜色

即把透明度修改为 0, 把背景设置为透明即可.

The end !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值