android 플러그 인 스크롤 입문 실천
위의 그림 에서 보 듯 이 그 원 리 는 바로 이렇다.그럼 다음은 코드 차원 에서 실현 을 살 펴 보 겠 습 니 다.
코드 에는 주로 네 가지 종류 가 포함 되 어 있 습 니 다.
NestedScrollingChild、NestedScrollingChildHelper、NestedScrollingParent、NestedScrollingParentHelper
Nested Scrolling Child 인터페이스 에서 정의 하 는 방법 을 먼저 봅 니 다.
public interface NestedScrollingChild {
/**
*
*/
public void setNestedScrollingEnabled(boolean enabled);
/**
*
*/
public boolean isNestedScrollingEnabled();
/**
*
* @param axes , x, y 0
*/
public boolean startNestedScroll(int axes);
/**
*
*/
public void stopNestedScroll();
/**
* view
*/
public boolean hasNestedScrollingParent();
/**
* , onTouch/onInterceptTouchEvent/dispatchTouchEvent
* @param dxConsumed x
* @param dyConsumed y
* @param dxUnconsumed x
* @param dyUnconsumed y
* @param offsetInWindow View
*/
public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed,
int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow);
/**
* ,
*/
public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow);
/**
* ,
*/
public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed);
/**
* ,
*/
public boolean dispatchNestedPreFling(float velocityX, float velocityY);
}
NestedScrollingParent NestedScrollingChild :
public interface NestedScrollingParent {
public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes);
public void onNestedScrollAccepted(View child, View target, int nestedScrollAxes);
public void onStopNestedScroll(View target);
public void onNestedScroll(View target, int dxConsumed, int dyConsumed,
int dxUnconsumed, int dyUnconsumed);
public void onNestedPreScroll(View target, int dx, int dy, int[] consumed);
public boolean onNestedFling(View target, float velocityX,
float velocityY,boolean consumed);
public boolean onNestedPreFling(View target, float velocityX, float velocityY);
public int getNestedScrollAxes();
}
상기 두 가지 유형 은 기능 인 터 페 이 스 를 정 의 했 을 뿐 실제 실 현 된 코드 는 모두 Nested Scrolling ChildHelper 와 Nested Scrolling ParentHelper 에 포함 되 어 있다.처리 절차:
1.Nested Scrolling Child(아래 는 Child 로 대체)가 미 끄 러 지기 시작 할 때 onStartNested Scroll 을 호출 한 다음,에이전트 클래스 Nested Scrolling ChildHelper(아래 는 ChildHelper 로 대체)의 onStartNested Scroll 을 최근 의 Nested Scrolling Parent(아래 는 Parent 로 대체)에 게 요청 합 니 다.
2.ChildHelper 의 onStartNested Scroll 방법 이 true 로 돌아 가 Scroll 사건 을 함께 처리 하 는 것 에 동의 할 때 ChildHelper 는 Parent 에 onNested Scroll Accepted 에 게 준비 동작 을 하 라 고 통지 합 니 다.
3.Child 가 미 끄 러 지기 시작 할 때 먼저 onNested PreScroll 을 보 내 고 Child Helper 의 onNested PreScroll 에 게 Parent 에 게 내 가 지금 얼마나 미 끄 러 져 야 하 는 지 알려 달라 고 요청 합 니 다.괜 찮 을 것 같 습 니까?이때 Parent 는 실제 상황 에 따라 Child 에 게 현재 몇 거리 만 미 끄 러 질 수 있 는 지 알려 줍 니 다.그리고 ChildHelper 는 onNested PreScroll 에서 반 환 된 정보 에 따라 미 끄 러 지 는 거 리 를 상응 하 게 조정 합 니 다.
4.미 끄 러 지 는 과정 에서 Child 는 onNested Scroll 을 보 내 ChildeHelpaer 의 onNested Scroll 에 게 Parent 현재 Child 의 미끄럼 상황 을 알려 줍 니 다.
5.활주 할 때,먼저 onNested Fling 을 보 내 서 Parent 에 게 내 가 지금 활주 할 것 이 라 고 말 해 줄 것 입 니 다.괜 찮 겠 습 니까?이 럴 때 Parent 는 상황 에 따라 Child 에 게 활주 할 수 있 는 지 여 부 를 알려 줄 것 입 니 다.
6.Child 는 onNested Fling 을 통 해 되 돌아 오 는 Boolean 값 을 통 해 활주 여 부 를 판단 합 니 다.활주 하려 면 활주 할 때 onNested Fling 알림 을 보 내 Parent 활주 상황 을 알 립 니 다.
7.미끄럼 이벤트 가 끝나 면 child 는 onStopNested Scroll 을 보 내 부모님 께 관련 작업 을 하 라 고 알 립 니 다.
쓸데없는 소리 하지 마 세 요.코드 와 demo 를 보 는 것 이 중요 합 니 다https://github.com/JeffWangGithub/StickLayout
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.