ページ

2011年12月5日月曜日

オーバースクロールするListView

デフォルトのListViewではオーバースクロールしないので、
ListViewを継承してオーバースクロール出来るようにする。
なにはともあれ、ListViewを継承する。
public class OverScrollListView extends ListView {
あとは、overScrollByメソッドをオーバライドするだけ!

    /** overScrollする値. */
    private int overScrollDistance = 80;

    /**
     * OverScrollする値を設定します。(外部クラスから変更可能にする)
     * @param overScrollDistance OverScrollする値
     * @since 1.0.0
     */
    public void setOverScrollDistance(int overScrollDistance) {
        this.overScrollDistance = mOverscrollDistance;
    }

    /**
     * {@inheritDoc}
     * @see android.view.View#overScrollBy(
     *         int, int, int, int, int, int, int, int, boolean)
     * @since 1.0.0
     */
    @Override
    protected boolean overScrollBy(int deltaX, int deltaY,
                                   int scrollX, int scrollY,
                                   int scrollRangeX, int scrollRangeY,
                                   int maxOverScrollX, int maxOverScrollY,
                                   boolean isTouchEvent) {

        return super.overScrollBy(deltaX, deltaY,
                                  scrollX, scrollY,
                                  scrollRangeX, scrollRangeY,
                                  maxOverScrollX, overScrollDistance, isTouchEvent);
    }
オーバースクロールとは直接関係ないけど、ListViewスクロール時に背景色が変わってしまう対応も。
    /**
     * 初期化処理を行います。
     * @since 1.0.0
     */
    private void initialize() {

        // スクロール時の背景色変更を無効にする。
        super.setScrollingCacheEnabled(false);
        // 常にスクロール可にする。
        super.setOverScrollMode(OVER_SCROLL_ALWAYS);
    }
上記カスタムListViewを使うには、layoutを記載するxmlに以下のようにパッケージ名から指定する。
  <パッケージ名.OverScrollListView
    android:id="@+id/custom_list_view"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" />
あとは、通常のListViewのように使うだけ。
おしまい。

0 件のコメント:

コメントを投稿