实例介绍
【实例简介】
Dimezis: Android上类似iOS动态模糊的视图源码下载
BlurView
Dynamic iOS-like blur for Android Views. Includes library and small example project.
BlurView可以作为常规的FrameLayout使用。它能够对其底层内容进行模糊处理,并将其绘制为其子视图的背景。BlurView的子视图不会被模糊处理。当视图层次结构发生更改时(调用draw()),BlurView会重新绘制其模糊内容。它会保留位置和大小的变化,包括视图动画和属性动画。
如何使用
请尽量选择与BlurView在层次结构中最接近的根布局。这将极大地减少创建视图层次结构快照所需的工作量。
SurfaceView、TextureView、VideoView、MapFragment、GLSurfaceView等
由于它们仅使用硬件加速的Canvas,BlurView目前不支持对这些目标进行模糊处理,而BlurView依赖于软件Canvas来对要模糊处理的视图进行快照。
Gradle
由于JCenter即将关闭,请使用https://jitpack.io/和发布标签作为稳定版本的源。
implementation 'com.github.Dimezis:BlurView:version-2.0.3'
圆角
可以在没有圆角的情况下设置圆角,算法与其他常规视图相同:
创建一个圆角Drawable,并将其设置为背景。
然后设置剪辑,以便BlurView不会绘制在圆角之外
blurView.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
blurView.setClipToOutline(true);
相关线程-#37
为什么要在主线程上进行模糊处理?
因为在其他线程上进行模糊处理会引入1-2帧的延迟。
与其他模糊库相比
BlurView与几乎所有其他库相比的主要优势在于它不会触发冗余重绘。
BlurView从不使自身或层次结构中的其他视图无效,并且只在需要时更新,依赖于对硬件加速画布的位图变异。
它支持屏幕上的多个BlurView而不触发绘制循环。
它在需要特定分配大小的设备上使用了优化的RenderScript Allocations,极大地提高了模糊性能。
它允许选择一个自定义根视图来进行快照,从而减少绘制遍历的数量并提供更大的灵活性。
支持对话框(及对话框背景)的模糊处理
其他库:
🛑 BlurKit - 不断使自身无效
🛑 RealtimeBlurView - 不断使自身无效
【实例截图】
【核心代码】
Dimezis: Android上类似iOS动态模糊的视图源码下载
BlurView
Dynamic iOS-like blur for Android Views. Includes library and small example project.
BlurView可以作为常规的FrameLayout使用。它能够对其底层内容进行模糊处理,并将其绘制为其子视图的背景。BlurView的子视图不会被模糊处理。当视图层次结构发生更改时(调用draw()),BlurView会重新绘制其模糊内容。它会保留位置和大小的变化,包括视图动画和属性动画。
如何使用
<eightbitlab.com.blurview.BlurView android:id="@ id/blurView" android:layout_width="match_parent" android:layout_height="wrap_content" app:blurOverlayColor="@color/colorOverlay"> <!--Any child View here, TabLayout for example. This View will NOT be blurred --> </eightbitlab.com.blurview.BlurView> float radius = 20f; View decorView = getWindow().getDecorView(); // ViewGroup you want to start blur from. Choose root as close to BlurView in hierarchy as possible. ViewGroup rootView = (ViewGroup) decorView.findViewById(android.R.id.content); // Optional: // Set drawable to draw in the beginning of each blurred frame. // Can be used in case your layout has a lot of transparent space and your content // gets a too low alpha value after blur is applied. Drawable windowBackground = decorView.getBackground(); blurView.setupWith(rootView, new RenderScriptBlur(this)) // or RenderEffectBlur .setFrameClearDrawable(windowBackground) // Optional .setBlurRadius(radius)
请尽量选择与BlurView在层次结构中最接近的根布局。这将极大地减少创建视图层次结构快照所需的工作量。
SurfaceView、TextureView、VideoView、MapFragment、GLSurfaceView等
由于它们仅使用硬件加速的Canvas,BlurView目前不支持对这些目标进行模糊处理,而BlurView依赖于软件Canvas来对要模糊处理的视图进行快照。
Gradle
由于JCenter即将关闭,请使用https://jitpack.io/和发布标签作为稳定版本的源。
implementation 'com.github.Dimezis:BlurView:version-2.0.3'
圆角
可以在没有圆角的情况下设置圆角,算法与其他常规视图相同:
创建一个圆角Drawable,并将其设置为背景。
然后设置剪辑,以便BlurView不会绘制在圆角之外
blurView.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
blurView.setClipToOutline(true);
相关线程-#37
为什么要在主线程上进行模糊处理?
因为在其他线程上进行模糊处理会引入1-2帧的延迟。
与其他模糊库相比
BlurView与几乎所有其他库相比的主要优势在于它不会触发冗余重绘。
BlurView从不使自身或层次结构中的其他视图无效,并且只在需要时更新,依赖于对硬件加速画布的位图变异。
它支持屏幕上的多个BlurView而不触发绘制循环。
它在需要特定分配大小的设备上使用了优化的RenderScript Allocations,极大地提高了模糊性能。
它允许选择一个自定义根视图来进行快照,从而减少绘制遍历的数量并提供更大的灵活性。
支持对话框(及对话框背景)的模糊处理
其他库:
🛑 BlurKit - 不断使自身无效
🛑 RealtimeBlurView - 不断使自身无效
【实例截图】

【核心代码】
标签:
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论