我知道BottomSheetDialog已经这样做了,但是我需要使用从BottomSheetBehavior.from()生成的常规BottomSheet和行为.这个BottomSheet并不暗淡背景,而且触摸外面也不会关闭它.当显示BottomSheet时,是否有办法淡化背景?当外面触摸时可能会被解雇.基本上,行为就像BottomSheetDialog,但我必须直接使用BottomSheet BottomSheetBehavior.
谢谢!
解决方法
你可以使用我的概念,如果你想要我在
AlertDialog with Blur background in possition center使用
我的做法
>拍摄屏幕
>程式上动画模糊/模糊屏幕截图
>使用对话框获取currant窗口没有任何内容
>附加屏幕截图有效
>显示我想显示的真实视图
在这里,我有一个类将背景的图像作为位图
public class AppUtils { public static Bitmap takeScreenShot(Activity activity) { View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap b1 = view.getDrawingCache(); Rect frame = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; Display display = activity.getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; Bitmap b = Bitmap.createBitmap(b1,statusBarHeight,width,height - statusBarHeight); view.destroyDrawingCache(); return b; } }
恭喜现在你有一个与你的背景相同的暗/暗的图像
那么你的要求就是像我这样不那么模糊,所以你可以把这个位图传给下面的方法,
public static Bitmap changeBitmapContrastBrightness(Bitmap bmp,float contrast,float brightness) { ColorMatrix cm = new ColorMatrix(new float[] { contrast,brightness,contrast,1,0 }); Bitmap ret = Bitmap.createBitmap(bmp.getWidth(),bmp.getHeight(),bmp.getConfig()); Canvas canvas = new Canvas(ret); Paint paint = new Paint(); paint.setColorFilter(new ColorMatrixColorFilter(cm)); canvas.drawBitmap(bmp,paint); return ret; }
现在使用一个假的对话框/对话框,只有一个背景/内容才能获得窗口(检查我的问题实现,你可以理解)
Window window = fakeDialogUseToGetWindowForBlurEffect.getWindow(); window.setBackgroundDrawable(draw); // draw is bitmap that you created
在此之后,您可以显示您的真实视图.在我的情况下,我显示一个警报,您可以显示任何您的视图,并记住删除/去那个警报,当你的真实视图从屏幕出来!
快出来:(可以根据需要定制背景,不光暗)