수평 스크롤보기에서 스크롤 상태를 얻는 방법 : Android

햇볕이 잘 드는

가로 스크롤보기를 사용하고 있으며 특정 상황에서 첫 번째 항목을 숨기고 싶습니다. 이제 터치 리스너를 사용하여 사용자가 얼마나 스크롤했는지 확인하고이 첫 번째 항목 /보기가 표시되는지 여부를 확인한 다음 일부 계산을 기반으로 scrollTo ()를 수행합니다. 사용자가 튕기고 수평 스크롤 뷰 스크롤이 어느 정도 거리를 두는 경우가 처리되지 않는다는 것을 깨달을 때까지 모든 것이 잘되었습니다. 그래서 정확한 계산을 할 수 없습니다. 따라서 첫 번째 항목이 표시되는지 또는 터치 또는 플링의 결과로 가로 스크롤보기가 마침내 스크롤을 중지 한 후에 만 ​​확인하는 것이 가장 좋다는 것을 깨달았습니다.

그러나 가로 스크롤 막대가 스크롤을 멈추고 여전히 멈출 때 알려주는 방법을 찾을 수 없습니다.

누군가가 이것을 알아낼 수 있도록 도와 주시겠습니까?

감사.

에바리스 토크 자

ScrollView를 확장하여 스크롤 리스너를 추가합니다. 그런 다음 해당 사용자 정의 뷰를 사용하고 리스너에서 이벤트를 수신 할 수 있습니다 (코드는 scrollView와 함께 있지만 HorizontalScrollView로 변환하는 것은 매우 간단합니다).

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ScrollView;

public class ScrollViewWithListener extends ScrollView{

    private boolean mCurrentlyTouching;
    private boolean mCurrentlyFling;

    public interface ScrollViewListener {
        public void onScrollChanged(ScrollViewWithListener scrollView, int x, int y, int oldx, int oldy);
        public void onEndScroll();
     }

    private ScrollViewListener scrollViewListener = null;

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

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

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

    public void setScrollViewListener(ScrollViewListener scrollViewListener) {
       this.scrollViewListener = scrollViewListener;
    }

    @Override
    public void fling(int velocityY) {
        super.fling(velocityY);
        mCurrentlyFling = true;
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (scrollViewListener != null) {
            scrollViewListener.onScrollChanged(this, l, t, oldl, oldt);
        }

       if (Math.abs(t - oldt) < 2 || t >= getMeasuredHeight() || t == 0) {
           if(!mCurrentlyTouching){
                if (scrollViewListener != null) {
                   Log.d("SCROLL WITH LISTENER", "-- OnEndScroll");
                   scrollViewListener.onEndScroll();
               }
           }
          mCurrentlyFling = false;
       }

    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
       switch (ev.getAction()) {
      case MotionEvent.ACTION_DOWN:
           mCurrentlyTouching = true;
           break;
      case MotionEvent.ACTION_UP:
      case MotionEvent.ACTION_CANCEL:
          mCurrentlyTouching = false;
          if(!mCurrentlyFling){
               if (scrollViewListener != null) {
                  Log.d("SCROLL WITH LISTENER", "-- OnEndScroll");
                  scrollViewListener.onEndScroll();
               }
           }
          break;

      default:
         break;
        }
        return super.onTouchEvent(ev);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
       case MotionEvent.ACTION_DOWN:
           mCurrentlyTouching = true;
            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            mCurrentlyTouching = false;
            if(!mCurrentlyFling){
               if (scrollViewListener != null) {
                 Log.d("SCROLL WITH LISTENER", "-- OnEndScroll");
                   scrollViewListener.onEndScroll();
               }
           }
            break;

        default:
            break;
       }
       return super.onInterceptTouchEvent(ev);
    }
}

그런 다음 다음과 같이 xml에서 사용합니다.

<com.example.ScrollViewWithListener
    android:id="@+id/scrollWithListener"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TEST" />
</com.example.ScrollViewWithListener>

스크롤 변경 사항을 알리려는 리스너를 설정하는 것을 잊지 마십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

DataGrid 수평 스크롤 크기를 얻는 방법은 무엇입니까?

분류에서Dev

SingleChildScroll 내에서 수평 스크롤 ListView를 만드는 방법

분류에서Dev

여러 텍스트보기 Android에서 텍스트를 가로로 스크롤하는 방법

분류에서Dev

Vaadin 모달 창 : 부모보기에서 스크롤바를 얻는 방법

분류에서Dev

Google Glass에서 웹보기를 스크롤하는 방법

분류에서Dev

수평 스크롤바를 제거하는 방법?

분류에서Dev

수평 스크롤에 부드러운 스크롤 효과를 추가하는 방법은 무엇입니까?

분류에서Dev

Android 용 Java 코드에서 스크롤보기를 구현하는 방법은 무엇입니까?

분류에서Dev

수평 페이징 스크롤보기에서 날짜 선택기를 추가하는 방법은 무엇입니까?

분류에서Dev

Android에서 스크롤 메뉴를 만드는 방법

분류에서Dev

가로 스크롤보기의 너비를 얻는 방법

분류에서Dev

SingleChildScrollView 내에서 스크롤 할 수없는 목록보기를 구현하는 방법

분류에서Dev

테이블에 수평 상단 스크롤바를 추가하는 Aurelia 방식?

분류에서Dev

수평 스크롤보기, 스크롤 문제 Android

분류에서Dev

Vim에서 스크롤하는 동안 커서 수평 위치를 유지하는 방법

분류에서Dev

스토리 보드를 사용하여 iOS에서 수평 및 수직 스크롤 TableView를 만드는 방법은 무엇입니까?

분류에서Dev

수평 및 수직 스크롤 뷰를 모두 활성화하는 방법

분류에서Dev

수평 스크롤바에 마스크 그라디언트를 추가하는 방법

분류에서Dev

javascript 및 / 또는 css에서 아래로 스크롤 할 때 div를 수평으로 이동하는 방법

분류에서Dev

Android에서 세로 스크롤링 텍스트 뷰를 만드는 방법

분류에서Dev

react-simplebar에서 스크롤 속성을 얻는 방법 (상태 저장 기능에서)

분류에서Dev

Winform 응용 프로그램에서 수평 스크롤바를 모든 화면 크기의 호환성에 추가하는 방법

분류에서Dev

Dojo 트리에서 수평 스크롤바를 제거하는 방법은 무엇입니까?

분류에서Dev

CSS : 스크롤바를 가져 오는 대신 창을 사용하여 수평으로 크기를 조정하기 위해 배치 된 div를 얻는 방법

분류에서Dev

검도 목록보기 스크롤시 스크롤 이벤트를 얻는 방법

분류에서Dev

피카소를 사용하여 Android에서 가로 스크롤보기의 이미지를 슬라이드보기로 표시하는 방법

분류에서Dev

목록 항목에 스냅되는 Android 수평 스크롤

분류에서Dev

목록 항목에 스냅되는 Android 수평 스크롤

분류에서Dev

목록 항목에 스냅되는 Android 수평 스크롤

Related 관련 기사

  1. 1

    DataGrid 수평 스크롤 크기를 얻는 방법은 무엇입니까?

  2. 2

    SingleChildScroll 내에서 수평 스크롤 ListView를 만드는 방법

  3. 3

    여러 텍스트보기 Android에서 텍스트를 가로로 스크롤하는 방법

  4. 4

    Vaadin 모달 창 : 부모보기에서 스크롤바를 얻는 방법

  5. 5

    Google Glass에서 웹보기를 스크롤하는 방법

  6. 6

    수평 스크롤바를 제거하는 방법?

  7. 7

    수평 스크롤에 부드러운 스크롤 효과를 추가하는 방법은 무엇입니까?

  8. 8

    Android 용 Java 코드에서 스크롤보기를 구현하는 방법은 무엇입니까?

  9. 9

    수평 페이징 스크롤보기에서 날짜 선택기를 추가하는 방법은 무엇입니까?

  10. 10

    Android에서 스크롤 메뉴를 만드는 방법

  11. 11

    가로 스크롤보기의 너비를 얻는 방법

  12. 12

    SingleChildScrollView 내에서 스크롤 할 수없는 목록보기를 구현하는 방법

  13. 13

    테이블에 수평 상단 스크롤바를 추가하는 Aurelia 방식?

  14. 14

    수평 스크롤보기, 스크롤 문제 Android

  15. 15

    Vim에서 스크롤하는 동안 커서 수평 위치를 유지하는 방법

  16. 16

    스토리 보드를 사용하여 iOS에서 수평 및 수직 스크롤 TableView를 만드는 방법은 무엇입니까?

  17. 17

    수평 및 수직 스크롤 뷰를 모두 활성화하는 방법

  18. 18

    수평 스크롤바에 마스크 그라디언트를 추가하는 방법

  19. 19

    javascript 및 / 또는 css에서 아래로 스크롤 할 때 div를 수평으로 이동하는 방법

  20. 20

    Android에서 세로 스크롤링 텍스트 뷰를 만드는 방법

  21. 21

    react-simplebar에서 스크롤 속성을 얻는 방법 (상태 저장 기능에서)

  22. 22

    Winform 응용 프로그램에서 수평 스크롤바를 모든 화면 크기의 호환성에 추가하는 방법

  23. 23

    Dojo 트리에서 수평 스크롤바를 제거하는 방법은 무엇입니까?

  24. 24

    CSS : 스크롤바를 가져 오는 대신 창을 사용하여 수평으로 크기를 조정하기 위해 배치 된 div를 얻는 방법

  25. 25

    검도 목록보기 스크롤시 스크롤 이벤트를 얻는 방법

  26. 26

    피카소를 사용하여 Android에서 가로 스크롤보기의 이미지를 슬라이드보기로 표시하는 방법

  27. 27

    목록 항목에 스냅되는 Android 수평 스크롤

  28. 28

    목록 항목에 스냅되는 Android 수평 스크롤

  29. 29

    목록 항목에 스냅되는 Android 수평 스크롤

뜨겁다태그

보관