tablayout과scrollview의 미끄럼 연결 효과 실현
11770 단어 android
.support.design.widget.AppBarLayout
android:id="@+id/top_appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/sn_44dp"
android:background="@color/tabColor"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:contentInsetStart="0dp">
"match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
"@+id/ll_left_img"
android:layout_width="wrap_content"
android:layout_height="match_parent">
"@+id/goods_info_back"
android:layout_width="match_parent"
android:layout_height="@dimen/sn_22dp"
android:layout_gravity="center"
android:layout_weight="6.5"
android:src="@drawable/search_back"
android:layout_marginLeft="@dimen/sn_28dp"
android:layout_marginRight="@dimen/sn_8dp"/>
.support.design.widget.TabLayout
android:id="@+id/goods_tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
app:tabSelectedTextColor="@color/mall_color"
app:tabTextColor="@android:color/black"
app:tabIndicatorColor="@android:color/transparent"
app:tabGravity="center"
android:layout_weight="2">
.support.design.widget.TabLayout>
"@+id/ll_right_img"
android:layout_width="wrap_content"
android:layout_height="match_parent">
"@+id/goods_info_msg"
android:layout_width="match_parent"
android:layout_height="@dimen/sn_22dp"
android:src="@drawable/more_menu"
android:layout_weight="6.5"
android:layout_gravity="center"
android:layout_marginLeft="@dimen/sn_8dp"
android:layout_marginRight="@dimen/sn_28dp"/>
.support.v7.widget.Toolbar>
.support.design.widget.AppBarLayout>
여기에 Tablayout은 간단한 전환 효과만 실현했을 뿐, 나는 더 이상 설명하지 않겠다. 2.아래의 레이아웃은 상품 윤방도, 상품의 상세한 상황, 상품 평가와 추천 상품 네 부분으로 구성된 다음에 한 scorllview에 싸서 레이아웃 파일은 매우 간단하지만 비교적 지루해서 저는 여기에 붙이지 않겠습니다.우선tablayout의 클릭 전환 이벤트를 처리하고ddOnTabSelectedListener 감청을 추가합니다
//tablayout
goodsTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
int pos = tab.getPosition();
// TabLayout
tagFlag = false;
if (pos == 0) {
mainNestScroll.smoothScrollTo(0, scrollGoods.getTop());
}
if (pos == 1) {
mainNestScroll.smoothScrollTo(0, scrollDetail.getTop());
}
if (pos == 2) {
mainNestScroll.smoothScrollTo(0, scrollComment.getTop());
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
Log.i("tab", "onTabUnselected: " + tab.getPosition());
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
Log.i("tab", "onTabReselected: " + tab.getPosition());
}
});
해당하는tab 옵션을 눌렀을 때scrollview의smoothScrollTo 방법을 사용하여 레이아웃을 맨 위로 스크롤하는 효과를 실현합니다.getTop 방법은 현재 컨트롤의 맨 위 좌표를 가져옵니다.3. 위에서 Tab 옵션을 클릭하면 레이아웃의 미끄럼 효과가 나타난다. 그러면 레이아웃이 맨 위로 미끄러질 때 Tab 옵션의 전환은 어떻게 이루어져야 하는가. 만약에 현재 레이아웃이 맨 위에 있는지 판단한 다음에 Tab 옵션의 색깔을 설정하면 소용없다.현재 동작이scrollview주도인지 tablayout주도인지mainNestScroll을 통해tagFlag를 정의해야 합니다.getScrollY()는 ScrollView 슬라이딩 거리를 획득하여 ScrollView가 현재 전시하고 있는 맨 윗부분의 내용이 어느 내용 모듈에 속하는지 판단하고 구체적인 실현 코드는 다음과 같다.
/**
* ScrollView
* false: ScrollView
* true: TabLayout
*/
private boolean tagFlag = false;
/**
* , ,
*/
private int lastTagIndex = 0;
/**
* , ,
* true:
* false ;
*/
private boolean content2NavigateFlagInnerLock = false;
mainNestScroll.getViewTreeObserver().addOnScrollChangedListener(() -> {
tagFlag = true;
if (mainNestScroll.getScrollY() > scrollDetail.getTop()) {
refreshContent2NavigationFlag(2);
} else if (mainNestScroll.getScrollY() > scrollComment.getTop()) {
refreshContent2NavigationFlag(3);
} else if (mainNestScroll.getScrollY() > scrollGoods.getTop()) {
refreshContent2NavigationFlag(1);
} else {
refreshContent2NavigationFlag(0);
}
});
/**
*
*
* @param currentTagIndex
*/
private void refreshContent2NavigationFlag(int currentTagIndex) {
// , ,
if (lastTagIndex != currentTagIndex) {
content2NavigateFlagInnerLock = false;
}
if (!content2NavigateFlagInnerLock) {
//
content2NavigateFlagInnerLock = true;
// ScrollView ,
if (tagFlag) {
goodsTabLayout.setScrollPosition(currentTagIndex, 0, true);
}
}
lastTagIndex = currentTagIndex;
}
이상의scrollview와tablayout의 연결 효과 실현은 자신이 프로젝트를 할 때 겪는 작은 문제이다. 내부 자물쇠를 넣지 않고 동작 주체를 판단할 때 슬라이딩으로tab를 전환하는 효과를 실현할 수 없기 때문에 간단한 실현 기록이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.