文件夹打开全屏透明加上背景

This commit is contained in:
2020-11-26 18:13:26 +08:00
parent 651a424c7b
commit fff788c94c
2 changed files with 76 additions and 3 deletions

View File

@@ -24,15 +24,24 @@ import android.animation.Animator;
import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet; import android.animation.AnimatorSet;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.WallpaperManager;
import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetHostView;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Path; import android.graphics.Path;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
import android.text.InputType; import android.text.InputType;
import android.text.Selection; import android.text.Selection;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.util.Pair; import android.util.Pair;
import android.view.FocusFinder; import android.view.FocusFinder;
@@ -40,6 +49,7 @@ import android.view.KeyEvent;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewDebug; import android.view.ViewDebug;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityEvent;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
@@ -471,6 +481,56 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
} }
return folderCount >= MIN_FOLDERS_FOR_HARDWARE_OPTIMIZATION; return folderCount >= MIN_FOLDERS_FOR_HARDWARE_OPTIMIZATION;
} }
public Bitmap blur(Bitmap image) {
int width = Math.round(image.getWidth() * 0.4f);
int height = Math.round(image.getHeight() * 0.4f);
Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false);
Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);
RenderScript rs = RenderScript.create(getContext());
ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);
Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);
blurScript.setRadius(25f);
blurScript.setInput(tmpIn);
blurScript.forEach(tmpOut);
tmpOut.copyTo(outputBitmap);
return outputBitmap;
}
public Bitmap getWallpaperBg() {
WallpaperManager wallpaperManager = WallpaperManager.getInstance(getContext());
Drawable wallpaperDrawable = wallpaperManager.getDrawable();
Bitmap bm = ((BitmapDrawable) wallpaperDrawable).getBitmap();
Bitmap bitmap = cropImage(bm);
return bitmap;
}
private Bitmap cropImage(Bitmap oldBitmap){
WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getRealMetrics(dm);
int width = dm.widthPixels; // 屏幕宽度像素1200
int height = dm.heightPixels; // 屏幕高度像素1920
int picWidth = oldBitmap.getWidth();
int picHeight = oldBitmap.getHeight();
float wScala = (float) height/width;
float bScala = (float) picHeight/picWidth;
int newPicWidth;
int newpicHeight;
Bitmap bitmap = null;
if (wScala>bScala){
newPicWidth = (int) (picWidth / wScala);
newpicHeight = picHeight;
bitmap =Bitmap.createBitmap(oldBitmap,(newPicWidth - width)/2 ,0 , newPicWidth , newpicHeight);
}else {
newPicWidth = picWidth;
newpicHeight =(int) (picHeight * wScala);
bitmap =Bitmap.createBitmap(oldBitmap,0,(picHeight - newpicHeight) / 2 , newPicWidth , newpicHeight);
}
return bitmap;
}
/** /**
* Opens the user folder described by the specified tag. The opening of the folder * Opens the user folder described by the specified tag. The opening of the folder
@@ -478,6 +538,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
* is played. * is played.
*/ */
public void animateOpen() { public void animateOpen() {
Bitmap bm = blur(getWallpaperBg());
Folder openFolder = getOpen(mLauncher); Folder openFolder = getOpen(mLauncher);
if (openFolder != null && openFolder != this) { if (openFolder != null && openFolder != this) {
// Close any open folder before opening a folder. // Close any open folder before opening a folder.
@@ -487,6 +548,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
mIsOpen = true; mIsOpen = true;
DragLayer dragLayer = mLauncher.getDragLayer(); DragLayer dragLayer = mLauncher.getDragLayer();
dragLayer.setBackground(new BitmapDrawable(bm));
// Just verify that the folder hasn't already been added to the DragLayer. // Just verify that the folder hasn't already been added to the DragLayer.
// There was a one-off crash where the folder had a parent already. // There was a one-off crash where the folder had a parent already.
if (getParent() == null) { if (getParent() == null) {
@@ -572,6 +634,11 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
} }
mContent.verifyVisibleHighResIcons(mContent.getNextPage()); mContent.verifyVisibleHighResIcons(mContent.getNextPage());
/* 隐藏workspace和HotSeat begin */
mLauncher.getWorkspace().setVisibility(View.GONE);
mLauncher.getHotseat().setVisibility(View.GONE);
mLauncher.getIndicatorDots().setVisibility(View.GONE);
/* 隐藏workspace和HotSeat 0000009 end */
} }
public void beginExternalDrag() { public void beginExternalDrag() {
@@ -616,6 +683,9 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
// longer occludes the workspace items // longer occludes the workspace items
mLauncher.getDragLayer().sendAccessibilityEvent( mLauncher.getDragLayer().sendAccessibilityEvent(
AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
mLauncher.getWorkspace().setVisibility(View.VISIBLE);
mLauncher.getHotseat().setVisibility(View.VISIBLE);
mLauncher.getIndicatorDots().setVisibility(View.VISIBLE);
} }
private void animateClosed() { private void animateClosed() {
@@ -641,6 +711,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
DragLayer parent = (DragLayer) getParent(); DragLayer parent = (DragLayer) getParent();
if (parent != null) { if (parent != null) {
parent.removeView(this); parent.removeView(this);
parent.setBackground(null);
} }
mDragController.removeDropTarget(this); mDragController.removeDropTarget(this);
clearFocus(); clearFocus();
@@ -955,8 +1026,10 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
lp.width = width; lp.width = width;
lp.height = height; lp.height = height;
lp.x = left; // lp.x = left;
lp.y = top; // lp.y = top;
lp.x = (grid.availableWidthPx - getFolderWidth()) / 2;
lp.y = (grid.availableHeightPx - getFolderHeight()) / 2;
} }
public float getPivotXForIconAnimation() { public float getPivotXForIconAnimation() {

View File

@@ -85,7 +85,7 @@ public class FolderAnimationManager {
mFolder = folder; mFolder = folder;
mContent = folder.mContent; mContent = folder.mContent;
mFolderBackground = (GradientDrawable) mFolder.getBackground(); mFolderBackground = (GradientDrawable) mFolder.getBackground();
mFolderBackground.setAlpha(64);
mFolderIcon = folder.mFolderIcon; mFolderIcon = folder.mFolderIcon;
mPreviewBackground = mFolderIcon.mBackground; mPreviewBackground = mFolderIcon.mBackground;