Android監(jiān)聽(tīng)滑動(dòng)控件實(shí)現(xiàn)狀態(tài)欄顏色切換
今天給大家分享一個(gè)平時(shí)在滑動(dòng)頁(yè)面經(jīng)常遇到的效果:滑動(dòng)過(guò)程動(dòng)態(tài)修改狀態(tài)欄顏色。咱們廢話不多說(shuō),有圖有真相,直接上效果圖:
看到效果是不是感覺(jué)很熟悉,相對(duì)而言如果頁(yè)面頂部有背景色,而滑動(dòng)到底部的時(shí)候背景色變?yōu)榘咨蛘咂渌伾臅r(shí)候,狀態(tài)欄顏色不跟隨切換顏色有可能會(huì)顯得難看至極。因此有了上圖的效果,其實(shí)就是簡(jiǎn)單的實(shí)現(xiàn)了狀態(tài)欄顏色切換的功能,效果看起來(lái)不至于那么尷尬。
首先,我們需要分析,其中需要用到哪些東西呢?
- 沉浸式狀態(tài)欄
- 滑動(dòng)組件監(jiān)聽(tīng)
關(guān)于沉浸式狀態(tài)欄,這里推薦使用immersionbar,一款非常不錯(cuò)的輪子。我們只需要將mannifests中主體配置為NoActionBar類(lèi)型,再根據(jù)文檔配置好狀態(tài)欄顏色等屬性即可快速得到沉浸式效果:
<style name="Theme.MyApplication" parent="Theme.AppCompat.Light.NoActionBar"> //基礎(chǔ)設(shè)置 ImmersionBar.with(this) .navigationBarColor(R.color.color_bg) .statusBarDarkFont(true, 0.2f) .autoStatusBarDarkModeEnable(true, 0.2f)//啟用自動(dòng)根據(jù)StatusBar顏色調(diào)整深色模式與亮式 .autoNavigationBarDarkModeEnable(true, 0.2f)//啟用自動(dòng)根據(jù)NavigationBar顏色調(diào)整深色式 .init() //狀態(tài)欄view status_bar_view?.let { ImmersionBar.setStatusBarView(this, it) } //xml中狀態(tài)欄 <View android:id="@+id/status_bar_view" android:layout_width="match_parent" android:layout_height="0dp" android:background="#b8bfff" />
關(guān)于滑動(dòng)監(jiān)聽(tīng),我們都知道滑動(dòng)控件有個(gè)監(jiān)聽(tīng)滑動(dòng)的方法OnScrollChangeListener,其中返回了Y軸滑動(dòng)距離的參數(shù)。那么,我們可以根據(jù)這個(gè)參數(shù)進(jìn)行對(duì)應(yīng)的條件判斷以達(dá)到動(dòng)態(tài)修改狀態(tài)欄的顏色。
scroll?.setOnScrollChangeListener { _, _, scrollY, _, _ -> if (scrollY > linTop!!.height) { if (!isChange) { status_bar_view?.setBackgroundColor( Color.parseColor("#ffffff") ) isChange = true } } else { if (isChange) { status_bar_view?.setBackgroundColor( Color.parseColor("#b8bfff") ) isChange = false } } }
這里判斷滑動(dòng)距離達(dá)到紫色視圖末端時(shí)修改狀態(tài)欄顏色。因?yàn)槭窃诨卣{(diào)方法中,所以這里一旦滑動(dòng)就在不停觸發(fā),所以給了一個(gè)私有屬性進(jìn)行不必要的操作,僅當(dāng)狀態(tài)改變時(shí)且滑動(dòng)條件滿足時(shí)才能修改狀態(tài)欄。當(dāng)然在這個(gè)方法內(nèi)大家可以發(fā)揮自己的想象力做出更多的新花樣來(lái)。
注意:
- 滑動(dòng)監(jiān)聽(tīng)的這個(gè)方法只能在設(shè)備6.0及以上才能使用。
- 需要初始化滑動(dòng)控件的默認(rèn)位置,xml中將焦點(diǎn)設(shè)置到其父容器中,防止滑動(dòng)控件不再初始位置。
//初始化位置 scroll?.smoothScrollTo(0, 0) //xml中設(shè)置父view焦點(diǎn) android:focusable="true" android:focusableInTouchMode="true"
到此這篇關(guān)于Android監(jiān)聽(tīng)滑動(dòng)控件實(shí)現(xiàn)狀態(tài)欄顏色切換的文章就介紹到這了,更多相關(guān)Android控件狀態(tài)欄顏色切換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
android?微信搶紅包工具AccessibilityService實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了android?微信搶紅包工具AccessibilityService實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Android音頻系統(tǒng)AudioTrack使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android音頻系統(tǒng)AudioTrack的使用方法,如何使用AudioTrack進(jìn)行音頻播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Android TouchListener實(shí)現(xiàn)拖拽刪實(shí)例代碼
這篇文章主要介紹了Android TouchListener實(shí)現(xiàn)拖拽刪實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02Android編程之EditText常見(jiàn)操作示例
這篇文章主要介紹了Android編程之EditText常見(jiàn)操作,結(jié)合實(shí)例形式分析了Android EditText光標(biāo)與文本操作相關(guān)技巧,需要的朋友可以參考下2017-03-03Android Dialog對(duì)話框?qū)嵗a講解
本文通過(guò)實(shí)例代碼給大家介紹了Android Dialog對(duì)話框的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08微信小程序首頁(yè)數(shù)據(jù)初始化失敗的解決方法
這篇文章主要介紹了微信小程序首頁(yè)數(shù)據(jù)初始化失敗的解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01Android中EditText禁止輸入表情的實(shí)例代碼
本篇文章主要介紹了Android中EditText禁止輸入表情的實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08Android 自定義view實(shí)現(xiàn)TopBar效果
這篇文章主要為大家詳細(xì)介紹了Android 自定義view實(shí)現(xiàn)TopBar效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09