ページ

2011年12月14日水曜日

オーバースクロール後に指定位置で止める

以前書いたオーバースクロールするListViewに追加で、
オーバースクロール後に指定位置でスクロールを止められるようにしてみる。

想定はFrameLayoutなどで下部に半透明なメニューなどを配置した際に下に隠れてしまう項目をオーバースクロール後にちゃんと表示されるようにする!
これを上までスクロールして一番下を表示すると・・・
こんな感じに一番下の項目をメニューの上部でスクロールを止めて表示されるようにする。



    /** オーバースクロール後に最終的な終了するY位置. */
    private int overScrollFinY = 0;
    /** 下部にオーバースクロールしたかを判定するフラグ. */
    private boolean overScrollBottom = false;

    /**
     * オーバースクロール後の終了Y位置を設定します。
* @param overScrollFinY オーバースクロール後の終了Y位置 * @since X.X.X */ public void setOverScrollFinY(int overScrollFinY) { this.overScrollFinY = overScrollFinY; } /** * {@inheritDoc} * @see android.widget.AbsListView#onOverScrolled(int, int, boolean, boolean) * @since X.X.X */ @Override protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) { // 指定オーバースクロールの位置まで来たらフラグをたてる。 if (scrollY == overScrollDistance) { overScrollBottom = true; } else if (scrollY < 0) { // マイナス方向にスクロールされたらフラグをOFF overScrollBottom = false; } // 指定位置よりもスクロール位置が小さくなった時点でスクロール位置を固定する。 if (overScrollBottom && scrollY < overScrollFinY) { scrollY = overScrollFinY; } super.onOverScrolled(scrollX, scrollY, clampedX, clampedY); }
こんな感じでなんとなく要件を満たす動きになった。
おしまい。

0 件のコメント:

コメントを投稿