このページを正しく表示するにはJavascriptを有効にしてください。
画像に適した色が取れるPalette Library使ってみた
[Androidで画像に合ういい感じの色を見つけてくれるPalette Libraryを使う: Qiita](http://qiita.com/kazutoyo/items/7aec420f4b2b083b4d3c)
このQiitaの記事をみて便利そうだと思ったので、PaletteというAndroid用ライブラリを使ってみました。
使い方等は上の記事をそのまま参考にしてもらえると。
Bitmapを渡すだけ(非同期の場合はコールバックも)で利用できるので結構簡単に利用できます。
リストビューで同期的に取得してみましたが、最近の端末(Nexus5)ならカクつくことなく表示することが出来ました。大きな処理は作法的には非同期にすべきですが、外部と通信するわけでもないので実用上問題なければ同期コードでもよさそうです。
## 表示サンプル
テーマが6パターンあるので全部試してみました。
(Vibrant, Muted) × (Default, Light, Dark) = 6パターン
* Vibrant
* Muted
* VibrantLight
* MutedLight
* VibrantDark
* MutedDark
どれも色が多くて煩雑な印象を受けてしまいますが、これは余白とか設けたりしてちゃんとレイアウトを組んであげればいい感じになると思います。
尚、背景が白くなってるのは色情報がnullで帰ってきた場合です。この場合は汎用性のある色を予めこちらで指定してあげる必要があります。テーマによってnullになる対象も微妙に変わってきます。
## 外部の画像リソースを使う場合
外部の画像(URLから引っ張ってくる)場合、当然のことですが画像を取得してからでないと配色を決定することが出来ません。そのため画像取得→色解析→配色変更のように色が変わるまで時間がかかってしまいます。今回のようにリストビューでたくさんの画像を非同期で取得して表示するみたいなことをすると、画像が取得できた順にガチャガチャと色が変わってうるさいです。さらにそこからスクロールするとセルの表示と色変更が次々と起こってユーザーに優しくない動きをします。
表示時にValueAnimatorを使ってゆっくり色が変わるようにすることで少しガチャガチャ感が和らぎますが、それでも順序がランダムに出てきたりとあまり心地の良いUIではありません。未知の画像を扱うには向かなそうですね‥。これを防ぐにはサーバー側で予め色を解析して配信したり、端末で色が解析できたViewから表示するみたいな処理を入れる必要がありそうです。