2012-02-01 4 views
1

ニュースリーダータイプのアンドロイドアプリケーションを開発しています。ここで、ユーザーがニュースリストをスクロールし始めるときに、カスタムヘッダーとフッターバーをクリアします。ユーザーがニュースをスクロールするのを止めると、これらのバーが表示されます。このようにして、ユーザーにニュースを読むためのスペースを広げることができます。しかし問題は、onScrollStopやonScrollStartのようなイベントを発生させる方法が見つからないということです。 助けてください。ScrollViewでonScrollStopイベントを設定する方法

答えて

0

List13 Android API Demoをチェックしてください。

Activityは、ListView.OnScrollListenerを実装する必要があります。その後、コールバックを持っている:

public void onScrollStateChanged(AbsListView view, int scrollState) { 
    switch (scrollState) { 
    case OnScrollListener.SCROLL_STATE_IDLE: 

     break; 
    case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: 

     break; 
    case OnScrollListener.SCROLL_STATE_FLING: 

     break; 
    } 
} 

いけないあなたのListViewsetOnScrollListener(this)を呼び出すことを忘れ。私のプロジェクトで

+0

ありがとうPaul、しかし、これらのソリューションは、ListViewに適用される、私はそれらをScrollViewに実装する方法がわかりません。助けてください? – orchidrudra

+0

ああ、うわあ、それについて残念(私は何とかタイトルを無視!)。この回答は動作しているとマークされていました:http://stackoverflow.com/questions/3513594/android-scrollview-setonscrolllistener-like-listview –

1

私はので、私は自分のScrollListenerを実施し、スクロールの終了をインターセプトしなければならなかった:

public class VerticalScrollLayout extends ScrollView { 
    private GestureDetector gdScrolling; 
    private boolean isScrolling; 

    private OnScrollListener lOnScroll; 

    public VerticalScrollLayout(Context context) { 
     super(context); 
     setVerticalScrollBarEnabled(false); 

     gdScrolling = new GestureDetector(new SimpleOnGestureListener() { 
      @Override 
      public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
       isScrolling = true; 
       return false; 
      } 

      @Override 
      public boolean onDown(MotionEvent e) { 
       return true; 
      } 
     }); 

     setOnTouchListener(new OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       if (gdScrolling.onTouchEvent(event)) { 
        return false; 
       } 

       if(event.getAction() == MotionEvent.ACTION_UP) { 
        if(isScrolling) { 
         isScrolling = false; 
         if(lOnScroll != null) { 
          lOnScroll.onScrollEnded(); 
         } 
        } 
       } 

       return false; 
      } 
     }); 
    } 

    public void setOnScrollListener(OnScrollListener l) { 
     lOnScroll = l; 
    } 

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

    public interface OnScrollListener { 
     void onScrollChanged(int x, int y, int oldx, int oldy); 
     void onScrollEnded(); 
    } 
} 

それはベストプラクティスではないかもしれませんが、それはうまく動作します。

+0

これを達成するためのより良い方法があれば、私も興味があります。 – sebataz

+0

このオプションは機能しますが、もっと簡単な方法が必要です。誰もが私たちとそれを共有したいと思っています。あなたの努力のために1アップ。 :) – orchidrudra

関連する問題