スクロール時の描画方法

どうやっているのかずっと気になっている。

ScrollViewのソースコードを読み込む

onTouchEvent() をハンドリングしている
タッチ移動時
ACTION_MOVE -> ScrollView::scrollBy -> ScrollView::scrollTo -> View::scrollTo -> invalidate

フリング時
ACTION_UP -> ScrollView::fling -> invalidate -> ・・・-> ViewGroup::drawChild -> ScrollView::computeScroll -> Scrollerで位置計算 -> postInvalidate

SlidingTab のアニメーション

ACTION_MOVE -> SlidingTab::moveHandle
移動量の分だけmRight/mLeftを設定
閾値を超えたらアニメーション開始

Gallary

mFlngRunnableのメソッドで開始 startUsing*****メソッド
Gallary::trackMotionScroll() によって位置を再計算して、invalidate()で再描画を繰り返す

要素の追加は?

ViewAnimator

ひとつのViewを表示する。
アニメーションは、Animationクラスを利用

ViewSwitcher

二つのViewを切り替えて表示する

ImageSwitcher

Viewの中でもImageViewを切り替えて表示する

ViewFlipper

自動的にViewAnimator::showNext()呼ぶだけ。アニメーションは特に管理していない。