2010-05-19 10 views
14

나는 scrollview를 가지고 있으며, 이미 아래로 스크롤 된 경우에만 이벤트가 발생하기를 원하지만 scrollview가 아래쪽에 있는지 확인할 방법을 찾을 수 없습니다.스크롤보기가 이미 아래로 스크롤되었는지 어떻게 알 수 있습니까?

나는 그 반대를 위해 그것을 해결했다. 단지 이미 정상에 스크롤 않다면 이벤트가 발생 할 수 있습니다 :

scrollView.getHeight은() == scrollView.getScrollY +의 화면 크기, 다음은 아래로 스크롤하면
ScrollView sv = (ScrollView) findViewById(R.id.Scroll); 
    if(sv.getScrollY() == 0) { 
     //do something 
    } 
    else { 
     //do nothing 
    } 

답변

8

나는 그것을 작동시키는 방법을 찾았습니다. ScrollView에 대한 자식의 측정 된 높이를 확인해야했습니다.이 경우 LinearLayout입니다. 나는 스크롤이 필요하지 않을 때 뭔가해야하기 때문에 < =을 사용합니다. 나는. LinearLayout이 ScrollView만큼 높지 않을 때 이러한 경우 getScrollY 0

ScrollView scrollView = (ScrollView) findViewById(R.id.ScrollView); 
    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.LinearLayout); 
    if(linearLayout.getMeasuredHeight() <= scrollView.getScrollY() + 
      scrollView.getHeight()) { 
     //do something 
    } 
    else { 
     //do nothing 
    } 
+2

ScrollView는 하나의 자식 만 가질 수 있으므로 확실한 위치는 다음과 같습니다. if (scrollView.getScrollY() + scrollView.getHeight()> = scrollView.getChildAt (0) .getMeasuredHeight()) {/ * 스크롤 한 아래로 * /} – Tom

+0

이것은 방법에 배치 되었습니까? 이 코드는 어떻게 구현 되었습니까? –

+0

@ItzHoudini 가능한 한 제네릭으로 만들었으므로 원하는 방식으로 사용할 수 있습니다. – sanna

0

.

+1

스크롤이 바닥 getScrollY = 349 getBottom = 430 getMeasuredHeight = 430 getHeight = 430 에있을 때 그러나 마지막 세이다 주셔서 감사합니다 아무리 멀리까지 스크롤해도 상관 없습니다. 유일한 것은 getScrollY입니다. 당신이 말하는이 스크린 크기는 무엇입니까? 내가 그걸 놓친 걸까? 이 경우에는 81이어야하며 그 점을 전혀 생각할 수 없습니다. – sanna

1

당신은 수직 스크롤 뷰

5

int maxScroll = yourScrollView.getChildAt(0).getMeasuredWidth() - yourScrollView.getWidth(); 

변화 getHeight에 getWidth()을()을 수행하여 폭 최대 스크롤을 얻을 수 있습니다 항상 여기에 있습니다 :

public class myScrollView extends ScrollView 
{ 
    public myScrollView(Context context) 
    { 
     super(context); 
    } 
    public myScrollView(Context context, AttributeSet attributeSet) 
    { 
     super(context,attributeSet); 
    } 

    @Override 
    protected void onScrollChanged(int l, int t, int oldl, int oldt) 
    { 
     View view = (View)getChildAt(getChildCount()-1); 
     int d = view.getBottom(); 
     d -= (getHeight()+getScrollY()); 
     if(d==0) 
     { 
      //you are at the end of the list in scrollview 
      //do what you wanna do here 
     } 
     else 
      super.onScrollChanged(l,t,oldl,oldt); 
    } 
} 

xml 레이아웃에서 myScrollView를 사용하거나 yo에서 인스턴스화 할 수 있습니다. ur 코드. 힌트 : 사용자가 목록의 끝을 10 번 자주 친다면 코드는 10 번 실행됩니다. 원격 서버의 데이터를로드하여 목록을 업데이트하려는 경우 (대부분의 경우) 바람직하지 않을 수 있습니다. 원하지 않는 상황을 예측하고 피하십시오.

힌트 2 : 때로는 목록의 끝에 가까워지면 스크립트를 실행할 적절한시기가 될 수 있습니다. 예를 들어 사용자는 기사 목록을 읽고 끝에 가까워지고 있습니다. 목록이 완료되기 전에 더 많이로드하기 시작합니다. 이렇게하려면, 당신의 목적을 성취하기 위해이 작업을 수행 :

if(d<=SOME_THRESHOLD) {} 
+0

감사합니다 : D, 나는 이것을 위해 헤드 캐쉬로 즐거운 시간을 보냈습니다. – rkmax

관련 문제