android使用TabLayout+NestedScrollView 實現詳情介面tab頁 關聯 上下滑動檢視的效果
需求
最近有需求要實現商品詳情介面,比較常見的就是那種頭部是Tab頁,下面是滑動檢視,具體效果類似下圖:
當選中頭部某個tab,下部檢視滑動到具體內容,或者檢視滑動到某具體內容時,tab頁自動選中某tab。現在實現這種效果很簡單的,做個簡單總結。
實現
這裡使用TabLayout+NestedScrollView ,TabLayout負責頭部tab,NestedScrollView 負責介面上下滑動的檢視。如下部分程式碼:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
>
<androidx.core.widget.NestedScrollView
android:id="@+id/mainScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<View
android:id="@+id/oneStartView"
android:layout_width="match_parent"
android:layout_height="1px"
android:visibility="invisible"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<View
android:id="@+id/twoStartView"
android:layout_width="match_parent"
android:layout_height="1px"
android:visibility="invisible"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<View
android:id="@+id/threeStartView"
android:layout_width="match_parent"
android:layout_height="1px"
android:visibility="invisible"
/>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<com.google.android.material.tabs.TabLayout
android:id="@+id/goodsDetailsTabLayout"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_30"
android:background="@color/translucent"
app:tabIndicatorColor="@color/cash_gift_font_red"
app:tabIndicatorFullWidth="false"
app:tabIndicatorHeight="@dimen/dp_2"
app:tabRippleColor="@color/translucent"
app:tabSelectedTextColor="@color/black_font_color"
app:tabTextAppearance="@style/music_tabLayout_text"
android:visibility="gone"
app:tabTextColor="@color/black_font_color">
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="商品" />
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="詳情" />
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="店鋪" />
</com.google.android.material.tabs.TabLayout>
</FrameLayout>
檢視佈局好以後,具體控制程式碼 大致如下:
goodsDetailsTabLayout!!.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
when (tab.position) {
Int_ZREO -> {
mainScrollView.smoothScrollTo(0,30)
}
Int_ONE -> {
mainScrollView.smoothScrollTo(0,twoStartView.y.toInt())
}
Int_THREE ->{
mainScrollView.smoothScrollTo(0,threeStartView.y.toInt())
}
}
}
override fun onTabUnselected(tab: TabLayout.Tab) {}
override fun onTabReselected(tab: TabLayout.Tab) {}
})
上面是通過addOnTabSelectedListener實現選中tab,檢視滑動到某塊內容位置。
下面是通過setOnScrollChangeListener實現滑動檢視時觸發 選中某類tab 。
mainScrollView.setOnScrollChangeListener(NestedScrollView.OnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
when {
scrollY < 30 -> {
goodsDetailsTabLayout.visibility = View.GONE
}
scrollY < oneStartView.y.toInt() -> {
goodsDetailsTabLayout.visibility = View.VISIBLE
goodsDetailsTabLayout!!.selectTab(goodsDetailsTabLayout!!.getTabAt(0))
goodsDetailsTabLayout!!.setScrollPosition(0, 0f, true)
}
scrollY > twoStartView.y.toInt() -> {
goodsDetailsTabLayout.visibility = View.VISIBLE
goodsDetailsTabLayout!!.selectTab(goodsDetailsTabLayout!!.getTabAt(1))
goodsDetailsTabLayout!!.setScrollPosition(1, 0f, true)
}
scrollY > threeStartView.y.toInt() -> {
goodsDetailsTabLayout.visibility = View.VISIBLE
goodsDetailsTabLayout!!.selectTab(goodsDetailsTabLayout!!.getTabAt(2))
goodsDetailsTabLayout!!.setScrollPosition(2, 0f, true)
}
}
})
以上就是使用TabLayout+NestedScrollView 實現詳情介面tab頁 關聯 上下滑動檢視的效果,程式碼都是抽離出來的,大致如上。
相關文章
- 用CSS實現Tab頁切換效果CSS
- HarmonyOS NEXT應用開發—自定義檢視實現Tab效果
- 短視訊系統,Android 使用MotionLayout實現動畫效果Android動畫
- app直播原始碼,下拉檢視圖文詳情效果APP原始碼
- 【Android 動畫】動畫詳解之仿微信檢視大圖效果(四)Android動畫
- 使用延遲關聯實現高效分頁
- MyEclipse的html頁面 design檢視中 關閉視覺化介面EclipseHTML視覺化
- SpringAnimator彈簧聯動效果的實現Spring
- Linux檢視埠詳情Linux
- 短視訊平臺搭建,Android Studio詳情頁跳轉Android
- visibilitychange搭配document.hidden實現有意思的tab頁離開進入效果
- 利用JavaScript實現註冊頁面省市聯動效果(附程式碼)JavaScript
- Web 頁面如何實現動畫效果Web動畫
- 自定義實現MIUI的拖動視差效果(阻尼效果)UI
- Android 商品詳情頁懸浮效果以及沉浸式狀態列,無衝突Android
- 教你如何使用MvcPager實現分頁效果MVC
- 短視訊系統,實現介面陰影效果
- 使用Bootstrap tab頁切換的使用boot
- Flutter版本玩Android(3)——文章詳情頁FlutterAndroid
- html兩種方法來實現tab切換效果HTML
- CSS實現頁面切換時的滑動效果CSS
- 仿京東、淘寶首頁,通過兩層巢狀的RecyclerView實現tab的吸頂效果巢狀View
- Flutter實戰動畫番外篇-翻頁效果實現Flutter動畫
- Vue路由+Tab元件實現多頁籤功能Vue路由元件
- UI介面微信底部(ViewPager實現Tab,左右滑動+底部點選)UIViewpager
- VVICAPI介面解析,實現根據ID取商品詳情API
- 什麼是視差滾動?如何實現視差滾動的效果?
- 介面未全部提測,怎麼實現介面指令碼之間的自動化關聯?指令碼
- 毛玻璃效果在Android的實現Android
- H5頁面滾動阻尼效果實現H5
- 實現報表滾動到底部翻頁效果
- Android下檢視SO庫被依賴的情況Android
- 使用Gradle檢視Android專案中庫的依賴關係GradleAndroid
- Android 實現GridView的橫向滾動,實現仿京東秒殺效果AndroidView
- Android 翻頁效果加蘋果桌面應用抖動效果Android蘋果
- 大屏報表元件間的聯動互動效果實現方法元件
- 直播軟體原始碼,實現頁面滾動到可視區顯示動畫效果原始碼動畫
- 線上直播系統原始碼,簡單實現Android應用的啟動頁原始碼Android