2010-06-22 8 views
5

ScrollView가 스크롤을 끝내면 검색 위치를 약간 수정할 수 있습니다. 사용자가 손가락을 떼었을 때를 감지하기 위해 ACTION_UP을 사용하기 전에 스크롤을 끝내기 전에 스크롤을 수정할 때 "핑핑"을 사용하지 못한다는 것을 깨달았습니다.scrollView가 스크롤되었을 때 감지

ScrollView가 스크롤을 끝내면 어떤 방법으로 감지 할 수 있습니까? 또는 ListView와 같은 스크롤 상태를 감지합니까?

이것을 구현하는 방법에 대한 다른 아이디어가 있습니까?

감사합니다.

+0

를이 링크를 시도하십시오 : http://stackoverflow.com/questions/8181828/android-detect-when-scrollview-stops-scrolling하는 데 도움이 – Shraddha

답변

1

저는 ScrollView의 하위 클래스를 생성하고, MyScrollView를 말하고, ScrollView 대신이를 사용하여 접근합니다.

이렇게하면 스크롤 할 때 호출되는 ScrollView의 메서드를 재정의 할 수 있습니다. someform 콜백을 추가하십시오. (super에있는 해당 메소드를 호출하는 것을 잊지 말것)

언제 ScrollView의 메소드가 호출되는지는 알 수 없습니다. 나는 그들 중 하나가 scoll이 일어날 때마다 호출된다고 가정하지만 어느 것이 ... 아마도 간단하게는 scrollTo()입니다.

나는 모두를 무시하고 그들이 불렀을 때 그냥 로그하는 것이 매우 흥미롭고 배우는 경험이 될 것이라고 생각한다. 나는 그 일을 스스로하고 싶을 수도 있습니다. 그렇다면, 나는 그 시간 동안 아무도하지 않는다고 가정 할 때보다 유용한 대답으로 돌아올 것입니다.

+0

감사합니다. ScrollView에 대한 소스를 찾을 수있는 곳이있어서 스크롤 처리 방법을 볼 수 있습니까? 나는 정말로 그것을 바꿀 필요가 없다고 생각하고, 내 물건을 다루는 끝에 무언가를 추가한다. 그러나 그것들을 보도록 도울 것이다. – Matt

+0

ScrollView의 소스를 검사하는 것도 좋은 생각입니다. 거기서 도넛 버전을 찾았습니다 : http://www.netmite.com/android/mydroid/donut/frameworks/base/core/java/android/widget/ScrollView.java -'scrollTo()'의 소스가 있습니다. 'scrollBy()'가 호출 될 때마다 호출되어야한다고 말하는 주석 - 그래서'scrollTo()'를 우선하는 경향이 있습니다. 독서와 함께 행운 :-) – Joubarc

+4

그냥 onScrollChanged()를 재정의하십시오. –

3

나는 Jourbac 코멘트를 기반으로 솔루션을 구현했습니다.

감사

import android.content.Context; 
import android.os.Handler; 
import android.os.Message; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.widget.ScrollView; 

public class MyScrollView extends ScrollView { 

    private static final int WHAT = 1; 

    class MyHandler extends Handler { 
     @Override 
     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 
      if(!hasMessages(WHAT)) { 
       Log.i("TestScroll", "Last msg!. Position from " 
            + msg.arg1 + " to " + msg.arg2);     
      } 
     } 
    } 

    private Handler mHandler = new MyHandler(); 

    public MyScrollView(Context context) { 
     super(context); 
    } 

    public MyScrollView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public MyScrollView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
     super.onScrollChanged(l, t, oldl, oldt); 
     final Message msg = Message.obtain(); 
     msg.arg1 = oldt; 
     msg.arg2 = t; 
     msg.what = WHAT; 
     mHandler.sendMessageDelayed(msg, 500); 
    } 

} 
+0

이것은 질문 작성자가 요구 한 것을 해결하지 못합니다. 단지 스크롤 변경시마다 지연된 메시지를 보냅니다. – Warlax

+0

로그 메시지는 사용자가 0.5 초 안에 스크롤을 완료 한 경우에만 인쇄됩니다. 그것은 그 문제를 해결합니다. – Fede

+0

그것은 실제로 굉장한 대답이며 실제로 작동합니다! – Anton

관련 문제