感谢作者 RealtimeBlurView

!!!源码链接在最后!!!

问题

在不断变化的背景中,实现毛玻璃

思路

(1)监听布局绘制,动态捕获布局的画像
(2)实时对布局的图片进行高斯模糊,绘制

实现

(1)监听实现,只需要在监听的布局中,设置好监听回调即可。
监听为ViewTreeObserver.OnPreDrawListener。设置好以后,布局绘制信息发生改变的时候,都会回调。

这里选择获取页面的decoreview作为监听的布局

    protected View getActivityDecorView() {Context ctx = getContext();for (int i = 0; i < 4 && !(ctx instanceof Activity) && ctx instanceof ContextWrapper; i++) {ctx = ((ContextWrapper) ctx).getBaseContext();}if (ctx instanceof Activity) {return ((Activity) ctx).getWindow().getDecorView();} else {return null;}}

decoreview监听如下:

private final ViewTreeObserver.OnPreDrawListener preDrawListener = new ViewTreeObserver.OnPreDrawListener() {@Overridepublic boolean onPreDraw() {··········return true;}};

然后,就是核心的绘制了。这里基于decoreview,通过设置一层canvas进行独立的绘制,核心方法如下:

    private final ViewTreeObserver.OnPreDrawListener preDrawListener = new ViewTreeObserver.OnPreDrawListener() {@Overridepublic boolean onPreDraw() {if (!canBlur()) {return true;}if (!blurInterval()) {return true;}final int[] locations = new int[2];Bitmap oldBmp = mBlurredBitmap;View decor = mDecorView;if (decor != null && isShown() && prepare() && checkScreenLocation(decor)) {boolean redrawBitmap = mBlurredBitmap != oldBmp;oldBmp = null;decor.getLocationOnScreen(locations);int x = -locations[0];int y = -locations[1];getLocationOnScreen(locations);x += locations[0];y += locations[1];// just erase transparentmBitmapToBlur.eraseColor(mOverlayColor & 0xffffff);int rc = mBlurringCanvas.save();mIsRendering = true;RENDERING_COUNT++;try {mBlurringCanvas.scale(1.f * mBitmapToBlur.getWidth() / getWidth(), 1.f * mBitmapToBlur.getHeight() / getHeight());mBlurringCanvas.translate(-x, -y);if (decor.getBackground() != null) {decor.getBackground().draw(mBlurringCanvas);}decor.draw(mBlurringCanvas);} catch (StopException e) {} finally {mIsRendering = false;RENDERING_COUNT--;mBlurringCanvas.restoreToCount(rc);}if (canBlur()) {blur(mBitmapToBlur, mBlurredBitmap);}if ((redrawBitmap || mDifferentRoot) && canBlur()) {Log.d(TAG, "onPreDraw identify: " + mIdentify);postInvalidate();}}return true;}};

可以看出,这里直接通过屏幕高度方法 getLocationOnScreen();进行坐标获取,在进行坐标计算,bitmap截取,绘制,实现了动态毛玻璃的效果。但是,这种相关仅仅使用于非视频层级,视频播放层级(surfaceview),目前还是没有毛玻璃效果的,暂未想到解决方案。

话说回来:

实现毛玻璃的方法,是使用安卓原生的api:RenderScript进行实现。这里没啥好说的。

注意

在recyclerview中,实现动态毛玻璃,需要特别适配,目前只适配了出现时的item显示毛玻璃,其余适配将会放到下一个博客,敬请期待!!

that’s all-------------------------------------------------

(代码地址–库libpicblur)[https://gitee.com/motosheep/androidutils-github]

关于安卓毛玻璃实现(一)动态毛玻璃相关推荐

  1. 动态毛玻璃特效html,实现div毛玻璃背景

    毛玻璃效果 ios里毛玻璃效果的使用非常多,本文介绍一个实现div毛玻璃背景的方法 CSS3 Filter CSS3的Filter主要用在图像的特效处理上,默认值为none,还有以下备选项: 1.gr ...

  2. 安卓控件大小动态文字排版_动态Web排版:爆炸文字

    安卓控件大小动态文字排版 Lately I've been interested in creating motion typography for the web. Making shattered ...

  3. 动态毛玻璃特效html,js和CSS3炫酷毛玻璃面板特效

    Frosted Panel 是一款使用js编写的炫酷毛玻璃特效插件.您通过简单的配置,既可以生成非常炫酷的半透明模糊的毛玻璃效果. 使用方法 在HTML文件中引入. HTML结构 创建HTML结构并使 ...

  4. android动态毛玻璃,Android模糊处理实现图片毛玻璃效果

    本文实例讲解了Android 虚化图片.模糊图片.图片毛玻璃效果的实现方法,具体内容如下 效果如图: 在Android可以用RenderScript方便的实现这个方法: private void bl ...

  5. 安卓应用如何引用动态库

    在APP的build.gradle中添加如下代码 release { jniLibs.srcDirs += ['../../../../lib/android/release'] } 其中后面的是一个 ...

  6. android毛玻璃遮罩效果_css3毛玻璃效果[模糊图片]

    希望有一天大家都能在借鉴中创新 实现图片遮罩的毛玻璃效果代码段很少,这里直接放效果视屏: https://www.zhihu.com/video/1222879519775842304 牵涉关键代码: ...

  7. Android动态赋权限,安卓6.0以上动态添加权限超简单模板

    今天又是"咔嚓"."窟窿"."轰隆",不晓得哪位大仙在渡劫.真的是风生水起,虎虎生威!!!言归正传: 描述:最近做了从服务器下载apk到手机 ...

  8. java毛玻璃_模糊效果(毛玻璃效果)

    模糊效果(毛玻璃效果) 效果演示: 1. 使用iOS自带的 UIImage+ImageEffects 文件 文件中有这么几个方法: - (UIImage *)applyLightEffect; - ( ...

  9. html使背景图片毛玻璃效果,vue实现毛玻璃背景图片效果

    vue实现毛玻璃背景图片 效果 代码 round width="80px" height="80px" :src="head_img" cl ...

  10. 毛玻璃matlab,QA清单(毛玻璃赛题)

    Q&A清单(毛玻璃赛题) Q:毛玻璃组的处理是通过MATLAB实现的,没有GUI可以么.最终的成像图像以及初始图像显示在一起,标题是学校名字 队员名字,以及队名可以么? A:windows操作 ...

最新文章

  1. MyEclipse10整合Axis2插件
  2. ios -使用NSLayoutConstraint实现多个view等宽等高等间距
  3. SAP LSMW 物料主数据Basic Data Text数据的导入
  4. SQLServer2005遇到的一些错误:233,18452,18470
  5. mysql 返回随机行_从mysql数据库返回随机行而不使用rand()
  6. module_param 在内核编程中的作用
  7. 前端实现数字快速递增_天正CAD教程之递增文字应用实例
  8. 死锁终结者:顺序锁和轮询锁!
  9. docker镜像是否包含操作系统
  10. 代码中大量的if/else,你有什么优化方案?
  11. 【CCCC】L2-005 集合相似度 (25分),维护set数组去重,比较统计
  12. PHP大文件分割上传(分片上传)
  13. “阿里味” PUA 编程语言火上GitHub热榜,标星1.9K!
  14. Winform界面中实现通用工具栏按钮的事件处理
  15. Android系统移植与调试之-------如何修改Android手机显示的4G信号强度的格子数
  16. 3d Max如何移除和取消网格显示
  17. 类91wan未注册域名分享
  18. 随机数生成方法总计(附代码
  19. 分享一下前端浏览的一些网址记录
  20. Javascript 声明时用“var”跟不用var的区别

热门文章

  1. 入射波反射波和驻波的特性推导
  2. mac tortoisesvn客户端_TortoiseSVN Mac版
  3. prometheus安装与开启并设置开机自启
  4. 《从零开始做运营》1~2章 读书笔记
  5. c语言什么意思000094,Hello World 背后的真实故事
  6. 《Python+Kivy(App开发)从入门到实践》自学笔记:Python文件+.kv 文件实现“Hello world”
  7. 什么是脚本语言(python脚本是什么?)
  8. php漂浮广告代码,JS随机漂浮广告代码具体实例
  9. C语言理论小学案例试讲,C语言试讲演示文稿.ppt
  10. Qt系列文章之(十三)表格窗体