SwipeRefreshLayoutのOverscrollを切る

きっかけ

引っ張って更新、引っ張り更新に使うLibraryとして
PullToRefreshとかActionbarPullToRefreshを今まで使って来たが、
基本的にはGoogleに準拠したものを使ったほうが後々楽になるだろうと考えている。

Support v4に入っているSwipeRefreshLayoutというのがあるが、
最初の頃はあまり人気の無かったコレもそろそろ補完というか使いやすく変わっているかと思い、
改めて使ってみたが、やっぱり使いにくいなぁという印象。

PullToRefreshと違って唯一のメリットは、任意でダイアログの表示をコード上から行える為、
ActivityやFragmenmtの初期起動時に読み込み表示をさせたいときに、適当な位置で一行書き加えるだけで、
UX的に、実装が楽なこととかかなとは思う。

今回の本題

ここで本題に入るが、SwipeRefreshLayoutは、基本的に引っ張り更新だが、
引っ張った際のOverscrollに違和感を感じるというか、Pulltorefreshに比べると、挙動が練られてない気がしたので、
OverScrollを切ることにした。

簡単にいうと、このOverScrollの部分は、
SwipeRefreshLayout の ContentOffsetTopの中のsetTargetOffsetTopAndBottomの、以下の部分を書き換え。

private void update ContentOffsetTop(int targetTop){
	if (targetTop > mDistanceToTriggerSync) {
            targetTop = (int) mDistanceToTriggerSync;
        } else if (targetTop < 0) {
            targetTop = 0;
        }
        //setTargetOffsetTopAndBottom(targetTop - currentTop);
        setTargetOffsetTopAndBottom(0); //上1行をコメントアウトしてここに追記
}

適当にRefreshLayoutをExtendsしてMySwipeRefreshLayoutとかのクラスを作成し、それを利用して


<com.your.app.MySwipeRefreshLayout
        android:id="@+id/swipe_refresh_widget"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <ListView
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:divider="@null"
            android:layout_height="match_parent" />
</com.your.app.MySwipeRefreshLayout>

以下、参考

http://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html
http://antonioleiva.com/swiperefreshlayout/
http://nlopez.io/swiperefreshlayout-with-listview-done-right/
http://www.dailydevbook.de/android-swiperefreshlayout-without-overscroll/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です