关于安卓毛玻璃实现(一)动态毛玻璃
感谢作者 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]
关于安卓毛玻璃实现(一)动态毛玻璃相关推荐
- 动态毛玻璃特效html,实现div毛玻璃背景
毛玻璃效果 ios里毛玻璃效果的使用非常多,本文介绍一个实现div毛玻璃背景的方法 CSS3 Filter CSS3的Filter主要用在图像的特效处理上,默认值为none,还有以下备选项: 1.gr ...
- 安卓控件大小动态文字排版_动态Web排版:爆炸文字
安卓控件大小动态文字排版 Lately I've been interested in creating motion typography for the web. Making shattered ...
- 动态毛玻璃特效html,js和CSS3炫酷毛玻璃面板特效
Frosted Panel 是一款使用js编写的炫酷毛玻璃特效插件.您通过简单的配置,既可以生成非常炫酷的半透明模糊的毛玻璃效果. 使用方法 在HTML文件中引入. HTML结构 创建HTML结构并使 ...
- android动态毛玻璃,Android模糊处理实现图片毛玻璃效果
本文实例讲解了Android 虚化图片.模糊图片.图片毛玻璃效果的实现方法,具体内容如下 效果如图: 在Android可以用RenderScript方便的实现这个方法: private void bl ...
- 安卓应用如何引用动态库
在APP的build.gradle中添加如下代码 release { jniLibs.srcDirs += ['../../../../lib/android/release'] } 其中后面的是一个 ...
- android毛玻璃遮罩效果_css3毛玻璃效果[模糊图片]
希望有一天大家都能在借鉴中创新 实现图片遮罩的毛玻璃效果代码段很少,这里直接放效果视屏: https://www.zhihu.com/video/1222879519775842304 牵涉关键代码: ...
- Android动态赋权限,安卓6.0以上动态添加权限超简单模板
今天又是"咔嚓"."窟窿"."轰隆",不晓得哪位大仙在渡劫.真的是风生水起,虎虎生威!!!言归正传: 描述:最近做了从服务器下载apk到手机 ...
- java毛玻璃_模糊效果(毛玻璃效果)
模糊效果(毛玻璃效果) 效果演示: 1. 使用iOS自带的 UIImage+ImageEffects 文件 文件中有这么几个方法: - (UIImage *)applyLightEffect; - ( ...
- html使背景图片毛玻璃效果,vue实现毛玻璃背景图片效果
vue实现毛玻璃背景图片 效果 代码 round width="80px" height="80px" :src="head_img" cl ...
- 毛玻璃matlab,QA清单(毛玻璃赛题)
Q&A清单(毛玻璃赛题) Q:毛玻璃组的处理是通过MATLAB实现的,没有GUI可以么.最终的成像图像以及初始图像显示在一起,标题是学校名字 队员名字,以及队名可以么? A:windows操作 ...
最新文章
- MyEclipse10整合Axis2插件
- ios -使用NSLayoutConstraint实现多个view等宽等高等间距
- SAP LSMW 物料主数据Basic Data Text数据的导入
- SQLServer2005遇到的一些错误:233,18452,18470
- mysql 返回随机行_从mysql数据库返回随机行而不使用rand()
- module_param 在内核编程中的作用
- 前端实现数字快速递增_天正CAD教程之递增文字应用实例
- 死锁终结者:顺序锁和轮询锁!
- docker镜像是否包含操作系统
- 代码中大量的if/else,你有什么优化方案?
- 【CCCC】L2-005 集合相似度 (25分),维护set数组去重,比较统计
- PHP大文件分割上传(分片上传)
- “阿里味” PUA 编程语言火上GitHub热榜,标星1.9K!
- Winform界面中实现通用工具栏按钮的事件处理
- Android系统移植与调试之-------如何修改Android手机显示的4G信号强度的格子数
- 3d Max如何移除和取消网格显示
- 类91wan未注册域名分享
- 随机数生成方法总计(附代码
- 分享一下前端浏览的一些网址记录
- Javascript 声明时用“var”跟不用var的区别
热门文章
- 入射波反射波和驻波的特性推导
- mac tortoisesvn客户端_TortoiseSVN Mac版
- prometheus安装与开启并设置开机自启
- 《从零开始做运营》1~2章 读书笔记
- c语言什么意思000094,Hello World 背后的真实故事
- 《Python+Kivy(App开发)从入门到实践》自学笔记:Python文件+.kv 文件实现“Hello world”
- 什么是脚本语言(python脚本是什么?)
- php漂浮广告代码,JS随机漂浮广告代码具体实例
- C语言理论小学案例试讲,C语言试讲演示文稿.ppt
- Qt系列文章之(十三)表格窗体