1. 程式人生 > >如何監聽CollapsingToolbarLayout的展開與摺疊

如何監聽CollapsingToolbarLayout的展開與摺疊

使用官方提供的 AppBarLayout.OnOffsetChangedListener就能實現了,不過要封裝一下才好用。

自定義一個繼承了 AppBarLayout.OnOffsetChangedListener的類,這裡命名為AppBarStateChangeListener:

public abstract class AppBarStateChangeListener implements AppBarLayout.OnOffsetChangedListener {
 
    public enum State {
        EXPANDED,
        COLLAPSED,
        IDLE
    }
 
    private State mCurrentState = State.IDLE;
 
    @Override
    public final void onOffsetChanged(AppBarLayout appBarLayout, int i) {
        if (i == 0) {
            if (mCurrentState != State.EXPANDED) {
                onStateChanged(appBarLayout, State.EXPANDED);
            }
            mCurrentState = State.EXPANDED;
        } else if (Math.abs(i) >= appBarLayout.getTotalScrollRange()) {
            if (mCurrentState != State.COLLAPSED) {
                onStateChanged(appBarLayout, State.COLLAPSED);
            }
            mCurrentState = State.COLLAPSED;
        } else {
            if (mCurrentState != State.IDLE) {
                onStateChanged(appBarLayout, State.IDLE);
            }
            mCurrentState = State.IDLE;
        }
    }
 
    public abstract void onStateChanged(AppBarLayout appBarLayout, State state);
}

然後這樣使用它:

mAppBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
            @Override
            public void onStateChanged(AppBarLayout appBarLayout, State state) {
                Log.d("STATE", state.name());
                if( state == State.EXPANDED ) {
                    
                    //展開狀態
                    
                }else if(state == State.COLLAPSED){
                    
                    //摺疊狀態
                     
                }else {
                
                    //中間狀態
                
                }
            }
        });

可能這並不是什麼新鮮知識,但是我是第一次有這樣的需求。很久以前開源了XRecyclerView,網友使用過程中提了很多issues,第一次體會到挖坑容易填坑難。上週開始我決定把這些issues一個個的解決,提高穩定性,並增加一些功能。此次就是為了解決issues/85 。XRecyclerView修復差不多之後,我做一個文件,放在網站首頁。

相關推薦

如何CollapsingToolbarLayout展開摺疊

使用官方提供的 AppBarLayout.OnOffsetChangedListener就能實現了,不過要封裝一下才好用。 自定義一個繼承了 AppBarLayout.OnOffsetChangedListener的類,這裡命名為AppBarStateChangeL

CollapsingToolbarLayout摺疊還是展開

今天整理我之前寫的程式碼,發現之前監聽CollapsingToolbarLayout的狀態的時候是通過監聽包裹CollapsingToolbarLayout著的AppBarLayout的OnOffsetChangedListener的方法來實現的。當時也是借鑑其他程式設計師的

微信小程式開發中textarea文字域字數限制動態計算

微信小程式開發時常會有評論或者備註功能,都會用到文字域字元長度計算以及字元限制的功能,筆者把最簡潔易用的案例分享出來。學習之前先看微信官方API文件 https://mp.weixin.qq.com/debug/wxadoc/dev/component/textarea.html

Zookeeper的機制api原理

1.連線Zookeeper,註冊監聽 ZooKeeper zkCli = new ZooKeeper("192.168.50.183:2181,192.168.50.184:2181,192.168.50.185:2181", 3000, new Watcher() { //

js事件:addEventListener() 移除事件:removeEventListener()

說事件繫結得先說事件流 事件流 冒泡型事件流:事件的傳播是從最特定的事件目標到最不特定的事件目標。即從DOM樹的葉子到根。【推薦】 捕獲型事件流:事件的傳播是從最不特定的事件目標到最特定的事件目標。即從DOM樹的根到葉子。 DOM標準採用捕獲+冒泡。兩種事件流都會觸發

Oracle常用命令之的啟動關閉以及切換資料庫例項

    這篇內容說下Oracle資料庫如何啟動、關閉資料庫監聽以及在同一個伺服器上有多個例項時如何切換到自己需要的例項上去。    1.啟動資料庫監聽        在伺服器命令列直接輸入命令lsnrctl start即可(listener control縮寫)       

Android 通過註冊廣播,實時網路連線斷開狀態的變化

很多時候我們都需要實時監聽網路狀態,當網路狀態發生變化之後立即通知程式進行不同的操作。 監聽廣播的兩種方式: (1)在AndroidManifest.xml配置檔案中宣告 <receiver android:name=".NetworkConn

Unity3d手機暫停退出事件

1,退出事件,Unity3d,InPut就包含了: Input.GetKey(KeyCode.Escape) 、 Input.GetKey(KeyCode.Home) 、Input.GetKey(KeyCode.Menu); 2,暫停事件,Unity3d的 OnApplicationFocus、OnApp

可控制的Select的展開摺疊

<Object type="application/x-oleobject" id=Shell classid="clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B"></Object><SELECT id=cb

listview巢狀gridview,並實現grid元素部分顯示以及點選展開摺疊

有時我們需要用GridView顯示目錄列表,有時甚至是二級的,即listview每一個item裡面又各自嵌入一個gridview,但是當二級目錄(資料條目)的數量過多時,介面會比較臃腫,這時我們就想要有類似展開與摺疊的效果,作者採用的策略是資料分段的分別顯示,其中對於顯示邊

ORACLE 動態註冊靜態註冊

註冊就是將資料庫作為一個服務註冊到監聽程式中。客戶端不需要知道資料庫名和例項名,只需要知道該資料庫對外提供的服務名就可以申請連結到資料庫。這個服務名可以與資料庫名一樣,也有可能不一樣。在資料庫服務啟動的過程中,資料庫伺服器向監聽程式中註冊相應的服務。無論何時啟動資料庫,預設的

關於CoordinatorLayout展開摺疊相關屬性

1、如何監聽CollapsingToolbarLayout的展開與摺疊 使用官方提供的 AppBarLayout.OnOffsetChangedListener就能實現了,不過要封裝一下才好用。 自定義一個繼承了 AppBarLayout.OnOffsetChangedLi

CollapsingToolbarLayout的使用及摺疊事件

CollapsingToolbarLayout給我麼提供了一個可以摺疊的toolbar。效果如下 它是design包裡面的元件,使用前需要匯入庫依賴。compile 'com.android.support:design:25.3.1' 先看xml檔案。 <?xml

JS中的事件事件流

pan 交互 ack 其他 獲得 發生 listen 監聽器 pre 事件監聽:   使用監聽器(eventListener)來預定事件,在傳統軟件工程中稱成為觀察者模式   執行某種操作時(特定的交互瞬間),會產生對象,對象會沿事件流的方向傳播。 事件流:   事件流有

linux下oracle11g R2的啟動關閉、數據庫

source app var copy time lac started success let 一、啟動監聽與數據庫 1、啟動監聽: [html] view plain copy [[email protected]/* */ oracle]# s

springIBM MQ JMS整合

[] utf-8 jms lan domain gravity tag tcp 主機 spring xml 的配置: 文件名:applicationContext-biz-mq.xml [html] view plain copy print? <?xml

rabbitMqspring boot搭配實現

address app caching prefix 前段時間 ever 不用 理解 its   在我前面有一篇博客說到了rabbitMq實現與zk類似的watch功能,但是那一篇博客沒有代碼實例,後面自己補了一個demo,便於理解。demo中主要利用spring boot

IEDOM的事件

attach 事件監聽 不支持 cnblogs log ima 1-1 mage png IE 事件監聽 標準DOM不支持 註意幾點: window.onload attachEvent detachEvent 標準DOM監聽,ie不支

元素全屏的設置

cnblogs list msr cancel fun 元素 awk pan code 作者網站:http://hawkzz.com 設置全屏和退出全屏 //全屏設置 $('#fullScreen').on('click', f

計算器界面事件

title default ride bool activate performed todo cati 最小化 package 計算器;import java.awt.BorderLayout; import java.awt.Container; import ja