メモ2ブログ

メモtoウェブログ。旧ブログはこちら。 http://sakebook.blogspot.jp/

動きに合わせて色をグラデーションさせる

2色間の色の変化を、時間指定ではなく値の変化で動的に行います。

ArgbEvaluator

アニメーションで使いますが、単独でも利用できます。

どこかでインスタンスを生成します。

private ArgbEvaluator mArgbEvaluator = new ArgbEvaluator();

次のメソッドを呼びます。fraction0だと、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));
    }

f:id:sakebook:20151220000949g:plain

この例だとほぼ無意味ですが、参考のようなViewPagerの背景色や、ScrollViewのスクロールに応じて雰囲気作りに使うなどができるでしょう。

参考

ArgbEvaluator / Android Developers

ValueAnimator で ArgbEvaluator を用いて色をアニメーションで変化させるとき、aaの値について / ikap

ViewPager with gradual Background Transition / Kuba Spatny