type
status
date
slug
summary
tags
category
icon
iOS
系统自带了模糊效果,但是Android
却没有,网上有很多实现方式,基本上都是用 faseBlur 算法,或者使用 RenderScript。本文用的也是这两种方法,当 api < 17 的时候用 faseBlur 算法,当 api >= 17 的时候用 RenderScript。不同点是,网上基本都是通过获取一张和视图大小相同的
Bitmap
然后压缩、模糊。现在手机的屏幕分辨率都很高,如果使用这种方法的话,第一次创建的 Bitmap
将会占用很大一部分内存,很容易出现 OOM 现象。因为我们做模糊处理,所以只需要一张视图的缩略图即可,不需要一张高清的图片,有没有办法获取到 View
的缩略图呢?答案是有的。一般获取
View
的 Bitmap
用的是 View
的 getDrawingCache
这个方法,此方法返回的是一张和 View
大小一模一样的位图。所以我们需要自己写获取位图的方法,参考 getDrawingCache
,里面是通过 view.draw(canvas)
在一张位图上画出视图的。这个就简单了,我们可以创建一个小型的 Bitmap
然后通过设置 Canvas
的缩放在这张小画布上画出视图的缩略图,这样子即省内存,也省时间(原先压缩需要时间)。<!-- more -->
关于模糊的具体处理网上有一大堆,这里不做描述
- Author:NotionNext
- URL:https://tangly1024.com/article/example-10
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts