ホーム DoRuby AndroidのScrollViewでスクロールの位置が変わったのを取得する方法

AndroidのScrollViewでスクロールの位置が変わったのを取得する方法

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

AndroidのListViewでスクロールの位置が変わったのを取得する際は、ListViewにOnScrollListenerをセットしてあげれば取得することができます。

ならScrollViewでも同じようにOnScrollListenerをセットすれば、スクロールの位置が変わったのを取得できる、、と思いきやそうもいきません。

ScrollViewの場合は、ScrollViewを継承してスクロールの位置が変わったのを取得できるScrollViewを作ります。

public class ObservableScrollView extends ScrollView {
    
    public interface ScrollViewListener {
        void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);
    }
    
    private HorizontalScrollViewListener scrollViewListener = null;

    public ObservableHorizontalScrollView(Context context) {
        super(context);
    }
    
    public ObservableHorizontalScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    
    public ObservableHorizontalScrollView(Context context, AttributeSet attrs, int defs) {
        super(context, attrs, defs);
    }
    
    public void setOnScrollViewListener(HorizontalScrollViewListener scrollViewListener) {
        this.scrollViewListener = scrollViewListener;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        super.onScrollChanged(x, y, oldx, oldy);
        if (scrollViewListener != null) {
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
        }
    }
}

ポイントは、Activityなどのスクロールの位置が変わったのを伝えるためのInterfaceを用意するのと、

それを onScrollChanged(int x, int y, int oldx, int oldy)の中に組み込むことです。

ちなみにiPhoneならUIScrollViewのDelegateをセットすれば、- (void)scrollViewDidScroll:(UIScrollView *)scrollViewでスクロールの位置が変わったのを取得できます。

なんて、面倒くさいのでしょう!

記事を共有

最近人気な記事