動きに合わせて色をグラデーションさせる
2色間の色の変化を、時間指定ではなく値の変化で動的に行います。
ArgbEvaluator
アニメーションで使いますが、単独でも利用できます。
どこかでインスタンスを生成します。
private ArgbEvaluator mArgbEvaluator = new ArgbEvaluator();
次のメソッドを呼びます。fraction
が0
だと、startValue
, 1
だと endValue
を返します。第二引数と第三引数のalpha
が同じでないと、想定通りの結果が返ってきません。
evaluate(float fraction, Object startValue, Object endValue)
次のように使います。返り値がObject
なので変換します。
(Integer) mArgbEvaluator.evaluate(0, Color.RED, Color.BLUE)
Sample
ListViewのスクロール位置に応じて背景色を変化させます。
ListViewにOnScrollListener
をセットし、onScroll
でスクロールした割合を計算します。
@Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // first position if (firstVisibleItem == 0) { listView.setBackgroundColor((Integer) mArgbEvaluator.evaluate(0, Color.RED, Color.BLUE)); return; } float scrollPosition = (firstVisibleItem) / (float)(totalItemCount - visibleItemCount); listView.setBackgroundColor((Integer) mArgbEvaluator.evaluate(scrollPosition, Color.RED, Color.BLUE)); }
この例だとほぼ無意味ですが、参考のようなViewPager
の背景色や、ScrollView
のスクロールに応じて雰囲気作りに使うなどができるでしょう。
参考
ArgbEvaluator / Android Developers
ValueAnimator で ArgbEvaluator を用いて色をアニメーションで変化させるとき、aaの値について / ikap