2

水平スクロール ビューに「OnTouchListener」を設定しました。onScrollListener を設定できません。これは水平スクロール ビューでは不可能ですか?

これは機能しません:

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
    // TODO Auto-generated method stub
    Log.i("Scrolling", "X from ["+oldl+"] to ["+l+"]");
    super.onScrollChanged(l, t, oldl, oldt);
}
4

1 に答える 1

7

現在のコード スニペットは、スクロールが変更されたことを他のオブジェクトに伝えていないため、機能しません。onScrollChanged() のスーパー バージョンを起動しているだけです。ただし、ログエントリを取得する必要があります。

スクロールの変更をリッスンするには、ScrollView を独自のリスナー インターフェイスで拡張する必要があります。これに似たもの:

public class MyScrollView extends ScrollView{
    public interface MyScrollViewListener{
        public abstract void onScrollChanged(int l, int t, int oldl, int oldt);
    }

    MyScrollViewListener mMyScrollViewListener; 

    public void setMyScrollViewListener(MyScrollViewListenerlistener){
        mMyScrollViewListener = listener;
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);

        if(mMyScrollViewListener != null){
            mMyScrollViewListener.onScrollChanged(l, t, oldl, oldt);
        }
    }
}

次に、現在のスクロールビューの代わりにこのスクロールビューを使用できます。スクロールの変化をリッスンしたいものにインターフェース MyScrollViewListener を実装し、setMyScrollViewListener 関数を使用して設定してください。

于 2013-07-23T08:32:00.887 に答える