(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 !