日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android onpagescrolled 参数,Android

發布時間:2024/4/11 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android onpagescrolled 参数,Android 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

8種機械鍵盤軸體對比

本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?

背景

ViewPager 在應用中使用較為廣泛,諸如頁面輪播圖,App引導頁,大圖預覽等。其中指示器頁比較重要

它用于提示用戶當前的頁面狀態,使得應用更具交互性。

PagerTitleStrip

PagerTitleStrip 內置的指示器,布局作為ViewPager的一個子View,需要設置android:layout_gravity=TOP/BOTTOM

但效果總不是太理想,多數情況,大都自定義一個Indicator,放在ViewPager的外部,通過ViewPager的onScroll方法,更新Indicator的位置效果等

自定義 Indicator

初步歸納為3步,自定義View,布局文件引用自定義View,關聯自定義View與ViewPager

自定義 PageIndicator

class PageIndicator extends RelativeLayout {

@Override

PageIndicator(context, attrs, defStyleAttr) {}

// ...

}

布局文件引用

android:id="@+id/music_indicator"

android:layout_width="match_parent"

android:layout_height="48dp" />

android:id="@+id/music_view_pager"

android:layout_width="match_parent"

android:layout_height="match_parent" />

關聯ViewPager

mPageIndicator.setViewPager(mViewPager)

// 并設置指示器的內容

mPageIndicator.addIndicators(getIndicators())

private fun getIndicators(): ArrayList {

val items = ArrayList()

return items

}

控制Indicator行為

重寫onPageScrolled,點擊Indicator實現ViewPager翻頁,跨頁跳轉時的屬性動畫

關鍵方法:onPageScrolled()

ViewPager.OnPageChangeListener.onPageScrolled()

override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {

val litem = getIndicator(position)

val ritem = getIndicator(position + 1)

litem?.setActiveState(1 - positionOffset)

ritem?.setActiveState(positionOffset)

}

跨頁切換 ViewPager 動畫

當前頁面個數為4,從第一頁直接跳轉到第4頁時,能明顯感覺到2、3 兩頁頁顯示出來了。

mViewPager.setCurrentItem(toItemIndex, true)

其原因就是直接在onPageScrolled在這種場景下發生了回調,從而導致Indicator的行為改變。所以,應該在點擊頂部指示器的時候,

屏蔽掉onPageScrolled里對指示器的控制,在點擊時添加指示器的動畫

animF.addListener(object : SimpleAnimator() {

override fun onAnimationEnd(animation: Animator?) {

indicator.isMenuItemClicked = false

}

})

animF.start()

// onPageScrolled() 里

if (isMenuItemClicked) {

// click the menu item, do animation directly

return

}

litem?.setActiveState(1 - positionOffset)

ritem?.setActiveState(positionOffset)

屬性動畫

ValueAnimator.ofFloat(0, 1)

ValueAnimator.setDuration(250) // 默認的頁面切換時間

ValueAnimator.addAmimator(onAnimationEnd())

如何獲取進入界面和退出界面

由于ViewPager的currentItem在滑動過程中是變化的,不能作為參考。 從第0頁滑動到第1頁position:0 , offset: 0.0->1.0f, currentItem: 當offset>0.5f的時候,會被更新為1

從第1頁滑動到第0頁position:0 , offset: 1.0->0.0f, currentItem: 當offset<0.5f的時候,會被更新為0

從第1頁滑動到第2頁position:1 , offset: 0.0->1.0f, currentItem: 當offset>0.5f的時候,會被更新為2

從第2頁滑動到第1頁position:1 , offset: 1.0->0.0f, currentItem: 當offset<0.5f的時候,會被更新為1

從第2頁滑動到第3頁position:2 , offset: 0.0->1.0f, currentItem: 當offset>0.5f的時候,會被更新為3

從第3頁滑動到第2頁position:2 , offset: 1.0->0.0f, currentItem: 當offset<0.5f的時候,會被更新為2

可以看出,position在左滑或者右滑時,始終保持不變,offset的變化值始終是滑動過程中的右邊頁面。

即:能定位到當前滑動頁的左邊和右邊頁,從而有效的控制指示器的行為

以position = 1舉例:

如果offset從0到1,說明是從第1頁滑向第2頁。本次滑動過程中: 左邊頁是第1頁,右邊是第2頁,offset從0~1,進入動畫

如果offset從1到0,說明是從第2頁滑向第1頁。本次滑動過程中: 左邊頁是第1頁,右邊是第2頁,offset從1~0,退出動畫

總結

關鍵數據 position,是onPageScrolled的第一個參數onPageScrolled(int position, *, **)

滑動過程中的左邊頁的需要即為 position, 而右邊頁對應就是 position + 1 所以才有下面的寫法

val litem = getIndicator(position)

val ritem = getIndicator(position + 1)

總結

以上是生活随笔為你收集整理的android onpagescrolled 参数,Android的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。