1. 程式人生 > >監聽CollapsingToolbarLayout是摺疊還是展開

監聽CollapsingToolbarLayout是摺疊還是展開

今天整理我之前寫的程式碼,發現之前監聽CollapsingToolbarLayout的狀態的時候是通過監聽包裹CollapsingToolbarLayout著的AppBarLayout的OnOffsetChangedListener的方法來實現的。當時也是借鑑其他程式設計師的方法實現的,現在也不知道是哪個網址,沒辦法貼出來。下面是我實現的方法:

public abstract class AppBarLayoutStateChangeListener implements AppBarLayout.OnOffsetChangedListener{

    enum State{
        EXPANDED
,//展開 COLLAPSED,//摺疊 INTERMEDIATE//中間狀態 } private State mCurrentState = State.INTERMEDIATE; @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (verticalOffset == 0) { if (mCurrentState != State.EXPANDED) { onStateChanged(appBarLayout, State.EXPANDED
); } mCurrentState = State.EXPANDED; } else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()) { if (mCurrentState != State.COLLAPSED) { onStateChanged(appBarLayout, State.COLLAPSED); } mCurrentState
= State.COLLAPSED; } else { if (mCurrentState != State.INTERMEDIATE) { onStateChanged(appBarLayout, State.INTERMEDIATE); } mCurrentState = State.INTERMEDIATE; } } public abstract void onStateChanged(AppBarLayout appBarLayout, State state); }
然後只要在程式碼中監聽即可
abl.addOnOffsetChangedListener(new AppBarLayoutStateChangeListener() {
    @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) {
        switch (state){
            case EXPANDED:
                Log.v("CoordinatorLayout","EXPANDED");
                break;
            case COLLAPSED:
                Log.v("CoordinatorLayout","COLLAPSED");
                toolbar.setVisibility(View.VISIBLE);
                break;
            case INTERMEDIATE:
                Log.v("CoordinatorLayout","INTERMEDIATE");
                toolbar.setVisibility(View.INVISIBLE);
                break;
        }
    }
});
我的使用場景是做圖片摺疊然後狀態列的隱藏,背景展開狀態列顯示,並且不在圖片中顯示title,我們在使用CollapsingToolbarLayout的使用的時候有一個屬性app:titleEnabled="false"設定為false的時候就不會在圖片上顯示title,然後我通過上面監聽的方法AppBarLayout來控制toolbar的隱藏顯示,以下是我的部分佈局程式碼
<android.support.design.widget.AppBarLayout
android:id="@+id/abl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

    <android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/ctl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp"
app:titleEnabled="false"
app:statusBarScrim="@color/colorPrimaryDark"
app:contentScrim="@color/colorPrimaryDark">

        <ImageView
android:layout_width="match_parent"
android:layout_height="180dp"
android:src="@drawable/pic_1"
android:scaleType="centerCrop"
app:layout_collapseMode="parallax"/>

        <android.support.v7.widget.Toolbar
android:id="@+id/toolbar_four"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
app:layout_collapseMode="pin">

        </android.support.v7.widget.Toolbar>

    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

相關推薦

如何CollapsingToolbarLayout展開摺疊

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

CollapsingToolbarLayout摺疊還是展開

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

使用註解定時Quartz+資料庫持久+動態job(或許支援分散式)

    springmvc框架已經很成熟了,所以引入的jar包我就不詳細說了,百度有很多我先簡單描述我說的主要功能: 由spring的Quartz在啟動之後,掃描資料庫的任務,使用場景,需要動態新增定時任務如:定時啟動某智慧家居裝置,定時抽獎等, 這裡順便附上一份第一種qua

CollapsingToolbarLayout的使用及摺疊事件

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

mac本 maven項目沒發布成功,tomcat就報沒有ContextLoaderListener 的解決方法

and class task pri sse $1 core run text Maven項目下update maven後Eclipse報錯:java.lang.ClassNotFoundException: ContextLoaderL 嚴重: E

android 軟鍵盤在頁面的展開和隱藏

獲取軟鍵盤狀態思路: 獲取當前頁面根佈局及其高度 RootH; 獲取狀態列高度 StatusH和導航欄高度 NavigationH; 獲取當前根檢視在螢幕上顯示的高度RectH; 高度差值比較,(根佈局高度 - 根檢視顯示高度)與(狀態列高度 + 導航欄高度)的大小對

高仿美團錢包首頁CollapsingToolbarLayout滑動隱藏效果(公司專案)

先看下效果圖 我們先看下佈局檔案: <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="h

Java Swing界面編程(25)---事件處理:鼠標事件及處理

鼠標右鍵 util else if this setbounds user swing 事件處理 dem 假設想對一個鼠標的操作進行監聽,假設鼠標按下、松開等。則能夠使用MouseListener接口。 package com.beyole.util; import

JS 事件綁定、事件、事件委托詳細介紹

兼容性 log 查看 and == 常用 提高 監聽 live 事件綁定 要想讓 JavaScript 對用戶的操作作出響應,首先要對 DOM 元素綁定事件處理函數。所謂事件處理函數,就是處理用戶操作的函數,不同的操作對應不同的名稱。 在JavaScript中,有三種常用的

dom元素改變

dom元素 options cal change bsp each fun 監聽 pass function domChange(domId, callback) { // select the target node v

時時input內容的改變

強人 tint doc 獲取 interval ons cti keypress span 心得:我們都知道inoput有一個change事件,但是是在input元素失去焦點的時候發生,不能時時的監聽input內容的改變。    剛開始的時候我是想用setInterval

js事件綁定/

eve dev func add code 不同 ndb mouse 匿名 事件綁定/監聽的方法 1.直接綁定 顧名思義,直接在DOM元素上綁定onclick、onmouseover、onmouseout、onmousedown、onmouseup、ondblclick

vue v-on事件

ood 語句 事件 targe vue blog count 內聯 tex 在html或jsp頁面中我們總能碰到監聽DOM事件來觸發javaScript代碼,下面我們就簡單聊聊Vue.js中的監聽事件是怎麽處理的。 在vue.js中監聽事件是通過v-on指令來實現的,先看一

JS中的事件與事件流

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

oracle 11g rac dbca建庫時提示創建

oracle 監聽 listener oracle rac Oracle 11g rac dbca建庫時提示創建監聽在安裝oracle 11g rac時,使用dbca建庫的過程中提示需要創建監聽:Default Listener "LISTENER" is not configured in

java中的key事件機制

com java.awt imp package 時間 ext javax .get pri package com.at221; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; im

AIX下RAC搭建 Oracle10G(五)安裝oracle、建立

soft lsnrctl term 例如 strong href lan cor pad AIX下RAC搭建系列 AIX下RAC搭建 Oracle10G(五)安裝oracle、建立監聽 環境 節點 節點1 節點2 小機型號

Java實現系統目錄實時更新。

warning xtend absolute ava single sdn data- sdk spl SDK1.7新增的nio WatchService能完美解決這個問題。美中不足是如果部署在window系統下會出現莫名其妙的文件夾占用異常導致子目錄監聽失效

java實時日誌寫入kafka

put article -c exti tab round 1.5 valueof max 目的 實時監聽某目錄下的日誌文件,如有新文件切換到新文件,並同步寫入kafka,同時記錄日誌文件的行位置,以應對進程異常退出,能從上次的文件位置開始讀取(考慮到效率,這裏是每

鍵盤frame變化

sub observe div 彈出 cga inf style chang cati /** * 監聽鍵盤的彈出和隱藏 */ - (void)keyboardWillChangeFrame:(NSNotification *)note { // 鍵盤最終的f