首页 > 其他分享 >Activity 类似Dialog主题背景高斯模糊

Activity 类似Dialog主题背景高斯模糊

时间:2023-01-11 10:35:27浏览次数:72  
标签:src return 高斯 int blur bitmap Dialog Activity Bitmap

 可以参考此文章:Android中Activity和AppcompatActivity的区别(详细解析)_today_work的博客-CSDN博客
/**
* 今天接到的需求是Activty 主题是Dialog样式,背景需要是桌面当时截图并做高斯模糊
* 1、Android Studio 默认继承AppcompactActivity,这时需要改成继承Activity 主题使用@android:style/Theme.Translucent.NoTitleBar.Fullscreen
* 2、AppcompaActivity 主界面带有toolbar的标题栏,而Activity 则没有;
* 3、AppcompaActivity theme主题只能用android:theme=”@style/AppTheme (appTheme主题或者其子类),
* 而不能用android:style。否则会提示错误: Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
*/
    
<application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/icon_app_pip_210x"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/icon_app_pip_210x"
        android:supportsRtl="true"
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

 

这里是同事给出的方法
/** * 反射截图 * @param isLandscape 横竖屏方式截屏会有差异 * @param context 上下文 * @return bitmap */ public static Bitmap screenshotSystem(boolean isLandscape,Context context) { Class<?> demo; Bitmap bitmap = null; try { demo = Class.forName("android.view.SurfaceControl"); Method method = demo.getMethod("screenshot", Rect.class, int.class, int.class, int.class); Object obj = method.invoke(null, new Rect(), Util.getScreenWidth(context), Util.getScreenHeight(context), isLandscape ? 0 : 1); //最后一个参数是拍摄角度0,1,2,3对应0,90,180,270 bitmap = (Bitmap) obj; } catch (Exception e) { e.printStackTrace(); Log.d("yyy", "screenshotSystem: error"); } return bitmap; } /** * bitmap整体先缩小 * @param bitmap * @return */ public static Bitmap small(Bitmap bitmap) { if (bitmap == null) { return null; } int w = bitmap.getWidth(); int h = bitmap.getHeight(); int retX, retY; Bitmap bmp = null; retX = 0; retY = 0; Matrix matrix = new Matrix(); matrix.postScale(1 / 4f, 1 / 4f); bmp = Bitmap.createBitmap(bitmap, retX, retY, w, h, matrix, true); if (!bitmap.equals(bmp) && !bitmap.isRecycled()) { bitmap.recycle(); //标记为被回收状态(dead),不可再使用 bitmap = null; } return bmp;// Bitmap.createBitmap(bitmap, retX, retY, nw, nh, null, } /** * 这里不是很懂 //android api 30把 hardware bitmap 转换成software bitmap * @param src * @return */ @RequiresApi(api = Build.VERSION_CODES.P) public static Bitmap convertHardWareBitmap(Bitmap src) { if (src.getConfig() != Bitmap.Config.HARDWARE) { //return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight()); return src; } final int w = src.getWidth(); final int h = src.getHeight(); // For hardware bitmaps, use the Picture API to directly create a software bitmap Picture picture = new Picture(); Canvas canvas = picture.beginRecording(w, h); canvas.drawBitmap(src, 0, 0, null); picture.endRecording(); return Bitmap.createBitmap(picture, w, h, Bitmap.Config.ARGB_8888); } /** * 对缩小的bitmap 进行高斯模糊,效率高 * @param bkg * @param context * @return */ public static Bitmap blur(Bitmap bkg,Context context) { final RenderScript rs = RenderScript.create(context); final Allocation input = Allocation.createFromBitmap(rs, bkg, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); final Allocation output = Allocation.createTyped(rs, input.getType()); final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setRadius(5); script.setInput(input); script.forEach(output); output.copyTo(bkg); return bkg; } /** * 接收缩小高斯模糊后的bitmap 恢复原来截图的大小 * @param bitmap * @return */ public static Bitmap big(Bitmap bitmap) { Matrix matrix = new Matrix(); matrix.postScale(4f, 4f); //长和宽放大缩小的比例 Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); return resizeBmp; }

 

MainActivity 继承Activity  在onCreate  方法截图 给Decorview 设置背景
public class MainActivity extends Activity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { backgroundBokeh(); super.onCreate(savedInstanceState); setContentView(R.layout.source_view); initView(); } /** * 背景虚化 */ @RequiresApi(api = Build.VERSION_CODES.P) public void backgroundBokeh() { Bitmap blur = Util.screenshotSystem(getResources().getConfiguration().orientation== Configuration.ORIENTATION_LANDSCAPE,this); blur = Util.small(blur); blur = Util.convertHardWareBitmap(blur); blur = Util.blur(blur,this); blur = Util.big(blur); getWindow().getDecorView().setBackground(new BitmapDrawable(this.getResources(), blur)); } }

 

标签:src,return,高斯,int,blur,bitmap,Dialog,Activity,Bitmap
From: https://www.cnblogs.com/mhzf/p/17040936.html

相关文章

  • Activity的生命周期简述
    一、Activity的生命周期简述在讲onStart()和onResume()的区别之前,必须清楚Activity的四种状态:1.Running状态:一个新的Activity的启动入栈后,它在屏幕最前端,处于栈的最顶端,......
  • Viterbi维特比译码误码率仿真,调制为QPSK,信道为高斯白噪声
    1.算法描述   整体思路如图1中所示,           其中输入序列使用randn函数来产生,卷积也采用matlab本身的函数conv,加性高斯白噪声用wgn函数来产生,由于......
  • Viterbi维特比译码误码率仿真,调制为QPSK,信道为高斯白噪声
    1.算法描述整体思路如图1中所示,其中输入序列使用randn函数来产生,卷积也采用matlab本身的函数conv,加性高斯白噪声用wgn函数来产生,由于实验的重点在Viterbi译码,下面介绍......
  • Application.FileDialog
     Application.FileDialog属性(Excel)MsoFileDialogType可为下述常量之一:msoFileDialogFilePicker。允许用户选择文件。msoFileDialogFolderPicker。允许用户选......
  • element ui可拖拽dialog-vue2
    文章目录​​1.准备js​​​​1.1`dialog-drag.js`​​​​1.2`index.js`​​​​2.`main.js`引用自定义指令​​​​3.使用​​1.准备js1.1​​dialog-drag.js​​......
  • elememt ui 组件 dialog使用备忘
    文章目录​​1.多层嵌套dialog遮罩​​​​1.1描述​​​​1.2解决(子dialog中)​​​​2.鼠标移除dialog点击不关闭​​1.多层嵌套dialog遮罩1.1描述当有多层dialog嵌......
  • 高斯函数(取整函数)性质在高中数学题中的使用(1)
    题目信息对\(x\in\textbf{R}\),\([x]\)表示不超过\(x\)的最大整数.十八世纪,\(y=[x]\)被“数学王子”高斯采用,因此得名为高斯函数.人们更习惯称之为“取整函数”,例如:\([-3.......
  • activity不适配达梦
    最近在做项目国产化,由mysql迁移到达梦数据库,在中间过程出现一些问题,由此记录下来。在迁移过程中,启动项目,发现报错:一查发现是activity不支持达梦。百度了一下,发现要修改源......
  • cereas学习(3-2) 稳健的曲线拟合 y=e(0.3x+0.1) 加了高斯噪声0.2 还有额外异常值
    稳健的曲线拟合¶现在假设我们得到的数据有一些异常值,即我们有一些不服从噪声模型的点。如果我们使用上面的代码来拟合这些数据,我们将得到如下所示的拟合。注意拟合曲线如......
  • cereas学习(3) 曲线拟合 y=e(0.3x+0.1) 加了高斯噪声0.2
    曲线拟合  structExponentialResidual{ExponentialResidual(doublex,doubley):x_(x),y_(y){}template<typenameT>booloperator()(cons......