iOSでは割りとよく見るBlur(ぼかし)ですが、Androidでも実現したい時があります。
Blurについて調べていた時に、便利なライブラリと出会ったので紹介します。
Glide Transformations
1つめはwasabeef先生作のGlide Transformations
です。
ImageLoaderとしてGlideを使っている方はこちらを使えばさくっとBlur効果を実現できます。
Glide.with(getContext())
.load(resId)
.bitmapTransform(BlurTransformation(getContext(), Glide.get(getContext()).getBitmapPool()))
.into(background)
使い方は上のようにTransformにライブラリでサポートされているTransformationを渡すだけです。
(RenderScriptを使用する必要はあります)
他のTransformationはGithubからたどってください。
Blurry
2つめはwasabeef巨匠作のBlurry
Glide Transformationsとは異なり、Viewを指定したりしてBlurを書けることが出来ます。Blur特化なライブラリです。インタフェースがとてもシンプルでいい感じです。
Blurry.with(MainActivity.this)
.radius(10)
.sampling(8)
.async()
.capture(findViewById(R.id.right_bottom))
.into((ImageView) findViewById(R.id.right_bottom));
サンプリングやどのViewに対してBlurをかけるのか等指定する事が可能です。Githubに上がっているサンプルアプリを触ると、とてもいい感じなのがわかります。
Blurry.with(MainActivity.this)
.radius(25)
.sampling(2)
.async()
.animate(500)
.onto((ViewGroup) findViewById(R.id.content));
また、↑のようにImageViewに反映するだけではなく作られたDrawableをViewGroupに追加することも可能です。ここはGlide Transformations
と異なる点です。
また、Blurryのasync()
やanimate()
などもサポートされているというホスピタリティが素敵でした。
まとめ
現在、Glide
を使用していて画像に対してBlurを実現したい場合はGlide Transformations
を使う方がいいです。キャッシュもありますし、わざわざBlurryを追加して使う必要もありません。
そもそも非同期で取得した画像に対してBlurryを使うのは少し面倒くさいです・・。(BlurryのIssueを見ると、キャッシュが2.0でサポートされるかもしれません。)
おまけ
Blurryがアニメーション・Blur効果の微調整・非同期など様々なものをサポートしているのに、中身がとてもシンプルな設計でコードも少なく感動したので記事を書こうかなと思い立ちました。
- Blurry
- Blur
- BlurFactor
- BlurTask
- Helper
クラスは↑の5つのみ。Blurryクラスはインタフェースとして提供されているので、実質4つだけ。しかもそれぞれとてもシンプルで読みやすい。コンパクトで使いやすいライブラリでとても素敵でした。