オーバースクロール後に指定位置でスクロールを止められるようにしてみる。
想定は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 件のコメント:
コメントを投稿