我试图制作一个背景不仅透明,而且具有模糊效果的视图。这样,下面的视图看起来就失去了焦点。我想让它看起来像按下电源按钮后的屏幕。有什么想法吗
既然窗口标志已被弃用,您必须模糊自己。我在其他地方回答了这个问题,但以下是模糊视图的方法:
现在可以使用RenderScript库中的ScriptIntrinsicBlur快速模糊。下面是如何访问RenderScript API。以下是我制作的用于模糊视图和位图的类:
导入android.support.v8.renderscript.*;
公共类生成器{
专用静态最终浮点位图_比例=0.4f;
专用静态最终浮动模糊半径=7.5f;
公共静态位图模糊(视图v){
返回模糊(v.getContext(),getScreenshot(v));
}
公共静态位图模糊(上下文ctx、位图图像){
int width=Math.round(image.getWidth()*位图大小);
int height=Math.round(image.getHeight()*位图大小);
位图输入位图=位图.createScaledBitmap(图像、宽度、高度、假);
位图输出位图=位图.createBitmap(输入位图);
RenderScript rs=RenderScript.create(ctx);
ScriptIntrinsicBlur theIntrinsic=ScriptIntrinsicBlur.create(rs,Element.U8_4(rs));
分配tmpIn=Allocation.createFromBitmap(rs,inputBitmap);
分配tmpOut=Allocation.createFromBitmap(rs,outputBitmap);
内部设置半径(模糊半径);
内部设置输入(tmpIn);
本征forEach(tmpOut);
tmpOut.copyTo(输出位图);
返回输出位图;
}
私有静态位图截图(视图v){
位图b=Bitmap.createBitmap(v.getWidth()、v.getHeight()、Bitmap.Config.ARGB_8888);
画布c=新画布(b);
v、 抽签(c);
返回b;
}
}
要将此应用于片段,请将以下内容添加到onCreateView:
最终活动活动=getActivity();
最终视图内容=activity.findviewbyd(android.R.id.content).getRootView();
if(content.getWidth()>;0){
位图图像=BlurBuilder.blur(内容);
setBackgroundDrawable(新的BitmapDrawable(activity.getResources(),image));
}否则{
content.getViewTreeObserver().addOnGlobalLayoutListener(新OnGlobalLayoutListener()){
@凌驾
公共图书馆{
位图图像=BlurBuilder.blur(内容);
setBackgroundDrawable(新的BitmapDrawable(activity.getResources(),image));
}
});
}
注意:此解决方案要求min sdk为API 17
EDIT:Renderscript包含在支持v8中,支持api 8的这一答案。要使用gradle启用它,请将这些行包含到您的gradle文件(来自此答案)中,并使用包android.support.v8.Renderscript中的Renderscript:
安卓{
…
默认配置{
…
renderscriptTargetApi*您的目标api*
renderscriptSupportModeEnabled true
}
…
}