Android ScrollView 점성 헤드 코드 공유
8570 단어 AndroidScrollView점성 두부
1.이 루어 진 효과 도 를 먼저 붙인다.
논 리 는 외부의 ScrollView 가 끝까지 미 끄 러 지지 않 을 때 위로 미 끄 러 질 때 외부의 ScrollView 를 미 끄 러 뜨 린 다 는 것 이다.외부의 ScrollView 가 바닥 에 도 착 했 을 때 우 리 는 다시 인터넷 에서 미 끄 러 지 는 것 이 내부 의 목록 을 미 끄 러 뜨리 는 것 이다.또한 좌우 로 미 끄 러 질 때 왼쪽 과 오른쪽 이 미 끄 러 지 는 거리 가 minPageSlop 보다 크 면 좌우 로 미 끄 러 지 는 것 이다.
다음은 배 고 픈 목록 페이지 를 모방 한 효과 그림 입 니 다.
2.도입
build.gradle jitpack repo
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}
module library
dependencies { implementation 'com.github.WelliJohn:StickScrollView:0.0.3'
}
3.인터페이스의 레이아웃 설명
<wellijohn.org.stickscrollview.ScrollViewWithStickHeader
android:id="@+id/stick_scroll_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants"
android:focusableInTouchMode="true"
android:orientation="vertical">
// header ,
</LinearLayout>
<LinearLayout
android:id="@+id/ll_stick_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.design.widget.TabLayout
android:id="@+id/order_manager_tabs"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#FFFFFF"
tools:tabGravity="fill"
tools:tabMode="fixed" />
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
</wellijohn.org.stickscrollview.ScrollViewWithStickHeader>
예 를 들 어 우리 가 본 배 고 픈 목록 페이지 인터페이스 에서 우 리 는 ViewPager 에 Fragment 를 설정 해 야 합 니 다.fragment 에서 좌우 두 개의 목록 입 니 다.fragment 의 xml 설정 을 보 세 요.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<wellijohn.org.stickscrollview.ChildRecyclerView
android:id="@+id/child_recyclerview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#EEEEEE" />
<wellijohn.org.stickscrollview.ChildRecyclerView
android:id="@+id/child_recyclerview_right"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="#FFFFFF"
android:layout_weight="3" />
</LinearLayout>
4.주의사항ScrollView With StickHeader 내 부 는 현재 ViewPager,ScrollView,RecyclerView,WebView ScrollView,RecyclerView,WebView 를 지원 합 니 다.ChildScrollView,ChildRecyclerView,ChildWebView 를 사용 할 때 mStickScrollView 를 호출 해 야 합 니 다.setContentView(mContentView);mLLStickList 는 우리 가 StickHeader+목록 이 필요 한 부분 입 니 다.만약 에 StickHeader 가 없다 면 목록 을 직접 설정 해서 들 어 와 도 됩 니 다.한 마디 로 하면 어느 위치 로 미 끄 러 지고 싶 은 지 다음 에 미 끄 러 지 는 것 은 단순 한 아래 부분 이 미 끄 러 지 는 것 입 니 다.그러면 아래 의 View 전 체 를 mContentView 로 설정 하 세 요.아까 그 콘 텐 츠 뷰 는 아 이 디 는 ll 입 니 다.stick_list 의 View.또한 이 곳 에서 ScrollView With Stick Header 는 autoscroll 속성 을 추가 합 니 다.기본적으로 닫 혀 있 습 니 다.autoscroll:true 라면 손가락 을 놓 을 때 contentView 는 자동 으로 위로 미 끄 러 지 는 지 숨 어 있 는 지 판단 합 니 다.
5.0.0.3 버 전 복 구 는 아래쪽 에 조작 표시 줄 이 있 을 때 인터페이스의 스크롤 에 오류 가 발생 합 니 다.
우리 밑 에 view 가 고정 되 어야 할 때,mStickScrollView.setBottomView(mView Bottom)를 통 해그러면 됩 니 다.다음 과 같 습 니 다.
6.모든 컨트롤 을 사용 할 때 우 리 는 그것 의 실현 방식 을 알 고 있 는 것 이 좋 습 니 다.그래서 여기 서 이 컨트롤 의 디자인 방향(Child ScrollView,Child RecyclerView,Child WebView 아래 의 것 을 모두 하위 ScrollView 라 고 부 릅 니 다)을 간단하게 소개 합 니 다.6.1.우 리 는 언제 외부 ScrollView 에 미끄럼 이 벤트 를 실행 시 켜 야 합 니까?언제 하위 ScrollView 에 미끄럼 을 실행 시 켜 야 합 니까?Android 에서 getParent().requestDisallow InterceptTouchEvent(true)방법 이 있 습 니 다.view 에 대응 하 는 이 벤트 를 가 져 오 는 것 입 니 다.6.2.view 의 touch 사건 을 어떻게 하 는 지 알 게 된 이상 어떤 상황 에서 부모 view 에 게 스크롤 사건 을 실행 시 켜 야 하 는 지,언제 하위 view 에 스크롤 사건 을 실행 시 켜 야 하 는 지 알 아야 합 니 다.아래 와 같이 나 는 표를 열거 했다.
아버지 ScrollVIEW
하위 스크롤 뷰
제스처 슬라이딩 방향
슬라이딩 이 벤트 는 어느 view 에 의 해 제어 되 지 않 습 니까?아래쪽 상단 에서 위로,아버지 ScrollView 는 아래쪽 상단 에서 아래로,아버지 ScrollView 아래쪽 은 상단 에서 위로,아들 ScrollView 아래쪽 은 상단 에서 아래로 ScrollView 아래쪽 상단 에서 아래로,아버지 ScrollView 아래쪽 상단 에서 위로,아들 ScrollView
여기 서 부모 ScrollView 가 아래쪽 에 없 을 때 하위 ScrollView 가 상단 에 없 는 경우 가 없 기 때문에 여기 서 분석 하지 않 습 니 다.
6.3.어떤 상황 에서 우 리 는 하위 ScrollVIEW 를 붙 잡 아야 합 니까?아니면 부모 ScrollView 에 미끄럼 사건 을 붙 잡 아야 합 니까?우 리 는 하위 ScrollView 에서 해당 하 는 코드 를 작성 하여 처리 할 수 있 습 니까?
아래 와 같이 ChildScrollView 의 onTouchEvent 방법 을 재 작성 합 니 다.다른 ChildRecyclerView 와 ChildWebView 처리 도 마찬가지 입 니 다.
@Override
public boolean onTouchEvent(MotionEvent event) {
if (mScrollViewWithStickHeader == null) return super.onTouchEvent(event);
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
mLastX = event.getX();
mLastY = event.getY();
// ScrollView
if (mScrollViewWithStickHeader.isBottom()) {
getParent().requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(event);
} else {
//
getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
}
if (action == MotionEvent.ACTION_MOVE) {
float nowY = event.getY();
if (!mScrollViewWithStickHeader.isBottom() && !isScrolledToTop && nowY - mLastY > 0) {
if (Math.abs(event.getX() - mLastX) < minPageSlop) {
getParent().requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(event);
} else {
getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
} else if (mScrollViewWithStickHeader.isBottom() && !isScrolledToBottom && nowY - mLastY < 0) {
if (Math.abs(event.getX() - mLastX) < minPageSlop) {
getParent().requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(event);
} else {
getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
} else if (mScrollViewWithStickHeader.isBottom() && !isScrolledToTop && nowY - mLastY > 0) {
if (Math.abs(event.getX() - mLastX) < minPageSlop) {
getParent().requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(event);
} else {
getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
} else {
getParent().requestDisallowInterceptTouchEvent(false);
}
}
if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
getParent().requestDisallowInterceptTouchEvent(false);
}
return super.onTouchEvent(event);
}
이렇게 하면 우 리 는 머리 를 고정 시 키 는 ScrollView 를 실현 할 수 있다.7. github 주소 。
이상 은 이번 편집장 이 정리 한 모든 내용 입 니 다.저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.