type
status
date
slug
summary
tags
category
icon
iOS系统自带了模糊效果,但是Android却没有,网上有很多实现方式,基本上都是用 faseBlur 算法,或者使用 RenderScript。
本文用的也是这两种方法,当 api < 17 的时候用 faseBlur 算法,当 api >= 17 的时候用 RenderScript。不同点是,网上基本都是通过获取一张和视图大小相同的 Bitmap 然后压缩、模糊。现在手机的屏幕分辨率都很高,如果使用这种方法的话,第一次创建的 Bitmap 将会占用很大一部分内存,很容易出现 OOM 现象。因为我们做模糊处理,所以只需要一张视图的缩略图即可,不需要一张高清的图片,有没有办法获取到 View 的缩略图呢?答案是有的。
一般获取 ViewBitmap 用的是 ViewgetDrawingCache 这个方法,此方法返回的是一张和 View 大小一模一样的位图。所以我们需要自己写获取位图的方法,参考 getDrawingCache,里面是通过 view.draw(canvas)在一张位图上画出视图的。这个就简单了,我们可以创建一个小型的 Bitmap 然后通过设置 Canvas 的缩放在这张小画布上画出视图的缩略图,这样子即省内存,也省时间(原先压缩需要时间)。
<!-- more -->
关于模糊的具体处理网上有一大堆,这里不做描述
如何优雅地在Android上实现iOS的图片预览Android高仿Chrome侧滑返回效果
Loading...