ViewPager滑動(dòng)靈敏度調(diào)整的方法實(shí)力
在項(xiàng)目中用到了Android的ViewPager組件,但是發(fā)現(xiàn)在滑動(dòng)的時(shí)候不是特別流暢,有些小的滑動(dòng)無(wú)法響應(yīng),于是考慮進(jìn)行優(yōu)化。
ViewPager 手指滑動(dòng)切換時(shí)會(huì)不靈敏,我們查看ViewPager源碼,切換的判斷是由mFlingDistance和mMinimumVelocity決定的。
private int determineTargetPage(int currentPage, float pageOffset, int velocity, int deltaX) {
int targetPage;
if (Math.abs(deltaX) > mFlingDistance && Math.abs(velocity) > mMinimumVelocity) {
targetPage = velocity > 0 ? currentPage : currentPage + 1;
} else {
final float truncator = currentPage >= mCurItem ? 0.4f : 0.6f;
targetPage = currentPage + (int) (pageOffset + truncator);
}
......
而mFlingDistance和mMinimumVelocity是類(lèi)內(nèi)部計(jì)算的,并沒(méi)有公開(kāi)接口提供設(shè)置。
private static final int MIN_DISTANCE_FOR_FLING = 25; // dips
private static final int MIN_FLING_VELOCITY = 400; // dips
void initViewPager() {
mMinimumVelocity = (int) (MIN_FLING_VELOCITY * density);
mFlingDistance = (int) (MIN_DISTANCE_FOR_FLING * density
}
我們可以通過(guò)反射來(lái)調(diào)整這2個(gè)值,解決滑動(dòng)靈敏度的問(wèn)題
val mFlingDistance: Field
mFlingDistance = ViewPager::class.java.getDeclaredField("mFlingDistance")
mFlingDistance.setAccessible(true)
val distance = mFlingDistance.get(mViewPager)//獲取值
mFlingDistance.set(mViewPager, 10) //你定義的值
val mMinimumVelocity: Field
mMinimumVelocity = ViewPager::class.java.getDeclaredField("mFlingDistance")
mMinimumVelocity.setAccessible(true)
val velocity = mMinimumVelocity.get(mViewPager)//獲取值
mMinimumVelocity.set(mViewPager, 5)//你定義的值
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android使用ViewPager完成app引導(dǎo)頁(yè)
- Android ViewPager實(shí)現(xiàn)滑動(dòng)指示條功能
- ViewPager+PagerAdapter實(shí)現(xiàn)帶指示器的引導(dǎo)頁(yè)
- Android使用viewpager實(shí)現(xiàn)畫(huà)廊式效果
- android使用ViewPager實(shí)現(xiàn)圖片自動(dòng)切換
- RecyclerView+PagerSnapHelper實(shí)現(xiàn)抖音首頁(yè)翻頁(yè)的Viewpager效果
- Android自定義引導(dǎo)玩轉(zhuǎn)ViewPager的方法詳解
- TabLayout+ViewPager實(shí)現(xiàn)切頁(yè)的示例代碼
- android使用viewpager計(jì)算偏移量實(shí)現(xiàn)選項(xiàng)卡功能
- Android使用ViewPager實(shí)現(xiàn)滾動(dòng)廣告
- Android Studio使用ViewPager+Fragment實(shí)現(xiàn)滑動(dòng)菜單Tab效果
- Android 兩個(gè)ViewPager的聯(lián)動(dòng)效果的實(shí)現(xiàn)
- ViewPager2滑動(dòng)沖突解決方案
相關(guān)文章
android Launcher AppWidget添加步驟介紹
大家好,本篇文章主要講的是android Launcher AppWidget添加步驟介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01
Android?Flutter控件封裝之視頻進(jìn)度條的實(shí)現(xiàn)
這篇文章主要來(lái)和大家分享一個(gè)很簡(jiǎn)單的控制器封裝案例,包含了基本的播放暫停,全屏和退出全屏,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-06-06
Android 中clipToPadding 和 clipChildren區(qū)別和作用
這篇文章主要介紹了Android 中clipToPadding 和 clipChildren區(qū)別和作用的相關(guān)資料,需要的朋友可以參考下2017-06-06
Android 自動(dòng)化測(cè)試經(jīng)驗(yàn)分享 深入U(xiǎn)iScrollable
UiScrollable是一個(gè)UiCollection(這東西還沒(méi)搞懂),我們可以使用它,在可滑動(dòng)的頁(yè)面(水平滑動(dòng)或上下滑動(dòng)都可以)上查找我們想要的控件(item)2013-05-05
Android Studio實(shí)現(xiàn)簡(jiǎn)單的QQ登錄界面的示例代碼
這篇文章主要介紹了Android Studio實(shí)現(xiàn)簡(jiǎn)單的QQ登錄界面的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
RecyclerView實(shí)現(xiàn)探探卡片滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了RecyclerView實(shí)現(xiàn)探探卡片滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Android實(shí)現(xiàn)微信自動(dòng)向附近的人打招呼(AccessibilityService)
這篇文章主要為大家詳細(xì)介紹了實(shí)現(xiàn)微信自動(dòng)向附近的人打招呼,實(shí)現(xiàn)收到指定賬戶推送文章時(shí)自動(dòng)進(jìn)入微信打開(kāi)鏈接,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
Android畫(huà)中畫(huà)窗口開(kāi)啟方法
Android8.0 Oreo(API Level26)允許活動(dòng)啟動(dòng)畫(huà)中畫(huà)Picture-in-picture(PIP)模式。PIP是一種特殊類(lèi)型的多窗口模式,主要用于視頻播放。PIP模式已經(jīng)可用于Android TV,而Android8.0則讓該功能可進(jìn)一步用于其他Android設(shè)備2023-01-01
Android應(yīng)用內(nèi)懸浮窗的實(shí)現(xiàn)方案示例
本篇文章主要介紹了Android應(yīng)用內(nèi)懸浮窗的實(shí)現(xiàn)方案示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
Android使用socket進(jìn)行二進(jìn)制流數(shù)據(jù)傳輸
這篇文章主要介紹了Android使用socket進(jìn)行二進(jìn)制流數(shù)據(jù)傳輸,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-04-04

