CollapsingToolbarLayout實現(xiàn)翻轉(zhuǎn)的toolbar

Android5.0后引入design設(shè)計婉商,利用design很容易實現(xiàn)翻轉(zhuǎn)效果
效果圖


collapsing_01.png
collapsing_02.png
collapsing_03.png

中間布局的搜索框滾動到頂部后末早,固定在標(biāo)題欄胁孙。
先看xml代碼
`<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/ctl"
        android:layout_width="match_parent"
        android:layout_height="220dp"
        app:collapsedTitleGravity="bottom"
        app:contentScrim="@color/colorPrimary"
        app:expandedTitleMarginStart="100dp"
        app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
        app:titleEnabled="false">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/colorPrimary"
            android:gravity="center_horizontal"
            app:layout_collapseMode="parallax"
            app:layout_collapseParallaxMultiplier="0.6">
            <ImageView
                android:id="@+id/iv_logo"
                android:layout_width="220dp"
                android:layout_height="80dp"
                android:layout_marginTop="60dp"
                android:src="@mipmap/ic_launcher" />
        </RelativeLayout>
        <LinearLayout
            android:id="@+id/ll_show_search"
            android:layout_width="match_parent"
            android:layout_height="35dp"
            android:layout_gravity="bottom"
            android:layout_marginBottom="20dp"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"
            android:background="@drawable/main0_edit_bg"
            android:orientation="horizontal">
            <EditText
                android:id="@+id/et_show"
                android:layout_width="0dp"
                android:layout_height="35dp"
                android:layout_weight="1"
                android:hint="@string/search_hint"
                android:textColor="@color/black_text"
                android:textColorHint="@color/text_hint"
                android:layout_gravity="center_horizontal"
                android:textSize="14dp"
                android:paddingBottom="2dp"
                android:background="@null"
                android:paddingLeft="15dp" />
            <ImageView
                android:id="@+id/iv_search_show"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_gravity="center_vertical"
                android:layout_marginRight="10dp"
                android:src="@mipmap/icon_search" />
        </LinearLayout>
        <android.support.v7.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:background="@color/colorPrimary"
            app:layout_collapseMode="pin">
            <LinearLayout
                android:id="@+id/ll_hide_search"
                android:layout_width="match_parent"
                android:layout_height="35dp"
                android:background="@drawable/main0_edit_bg"
                android:layout_marginRight="30dp"
                android:visibility="gone"
                >
                <EditText
                    android:id="@+id/et_hide"
                    android:layout_width="0dp"
                    android:layout_height="40dp"
                    android:layout_weight="1"
                    android:textSize="14dp"
                    android:hint="@string/search_hint"
                    android:textColor="@color/black_text"
                    android:textColorHint="@color/text_hint"
                    android:paddingBottom="4dp"
                    android:background="@null"
                    android:paddingLeft="20dp" />
                <ImageView
                    android:id="@+id/iv_search_hide"
                    android:layout_width="20dp"
                    android:layout_height="20dp"
                    android:layout_gravity="center_vertical"
                    android:layout_marginRight="10dp"
                    android:src="@mipmap/icon_search" />
            </LinearLayout>
        </android.support.v7.widget.Toolbar>
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

</android.support.design.widget.CoordinatorLayout>
`

前提是你已經(jīng)在項目中依賴了design包,并在styles.xml文件中配置toolbar的主題
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/> <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>
至于strings和colors文件中的文字描述竞滓,和顏色設(shè)定可以自由設(shè)置沦偎,這里不再貼出疫向。
MainActivity中的代碼
appbar = (AppBarLayout)findViewById(R.id.appbar); ivLogo = (ImageView)findViewById(R.id.iv_logo); hideSearch = (LinearLayout)findViewById(R.id.ll_hide_search); etHide = (EditText)findViewById(R.id.et_hide); etShow = (EditText)findViewById(R.id.et_show); appbar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { float a = ((float)Math.abs(verticalOffset)) / ((float)appBarLayout.getTotalScrollRange()); hideSearch.setVisibility(a> 0.6 ?View.VISIBLE:View.GONE); hideSearch.setAlpha(a>0.6 ? (a-0.6f) * 2.5f : 0f); ivLogo.setAlpha(imageScale(a)); } }); etHide.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if(!etShow.hasFocus()&& etHide.hasFocus()){ etShow.setText(s); } } }); etShow.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if(!etHide.hasFocus()&&etShow.hasFocus()){ etHide.setText(s); } } }); } private float imageScale(float a) { return a>0.5f ? 0: (1f- 2f*a); }

屬性介紹:
app:collapsedTitleGravity 設(shè)置和獲取折疊之后的標(biāo)題位置
app:contentScrim 獲取和設(shè)置折疊之后的背景
app:expandedTitleMarginStart 在展開狀態(tài)改變標(biāo)題文字的位置
app:expandedTitleMargin,
app:expandedTitleMarginBottom,
app:expandedTitleMarginEnd
app:layout_scrollFlags =''scroll|exitUntilCollapsed|snap''
scroll - 想滾動就必須設(shè)置這個。
enterAlways - 實現(xiàn)quick return效果, 當(dāng)向下移動時豪嚎,立即顯示View(比如Toolbar)搔驼。
exitUntilCollapsed - 向上滾動時收縮View,但可以固定Toolbar一直在上面侈询。
enterAlwaysCollapsed - 當(dāng)你的View已經(jīng)設(shè)置minHeight屬性又使用此標(biāo)志時舌涨,你的View只能以最小高度進(jìn)入,只有當(dāng)滾動視圖到達(dá)頂部時才擴(kuò)大到完整高度扔字。
app:titleEnabled 是否顯示標(biāo)題
app:layout_collapseMode="parallax" 折疊模式
pin - 設(shè)置為這個模式時囊嘉,當(dāng)CollapsingToolbarLayout完全收縮后温技,Toolbar還可以保留在屏幕上。
parallax - 設(shè)置為這個模式時扭粱,在內(nèi)容滾動時荒揣,CollapsingToolbarLayout中的View(比如ImageView)也可以同時滾動,實現(xiàn)視差滾動效果焊刹,通常和layout_collapseParallaxMultiplier(設(shè)置視差因子)搭配使用。
app:layout_collapseParallaxMultiplier(視差因子) - 設(shè)置視差滾動因子恳蹲,值為:0~1虐块。 具體效果自行測試

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嘉蕾,隨后出現(xiàn)的幾起案子贺奠,更是在濱河造成了極大的恐慌,老刑警劉巖错忱,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件儡率,死亡現(xiàn)場離奇詭異,居然都是意外死亡以清,警方通過查閱死者的電腦和手機(jī)儿普,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掷倔,“玉大人眉孩,你說我怎么就攤上這事±沾校” “怎么了浪汪?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長凛虽。 經(jīng)常有香客問我死遭,道長,這世上最難降的妖魔是什么凯旋? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任呀潭,我火速辦了婚禮,結(jié)果婚禮上至非,老公的妹妹穿的比我還像新娘蜗侈。我一直安慰自己,他們只是感情好睡蟋,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布踏幻。 她就那樣靜靜地躺著,像睡著了一般戳杀。 火紅的嫁衣襯著肌膚如雪该面。 梳的紋絲不亂的頭發(fā)上夭苗,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音隔缀,去河邊找鬼题造。 笑死,一個胖子當(dāng)著我的面吹牛猾瘸,可吹牛的內(nèi)容都是我干的界赔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼牵触,長吁一口氣:“原來是場噩夢啊……” “哼淮悼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起揽思,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤袜腥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钉汗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羹令,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年损痰,在試婚紗的時候發(fā)現(xiàn)自己被綠了福侈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡卢未,死狀恐怖癌刽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尝丐,我是刑警寧澤显拜,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站爹袁,受9級特大地震影響远荠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜失息,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一譬淳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盹兢,春花似錦邻梆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春剂娄,著一層夾襖步出監(jiān)牢的瞬間蠢涝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工阅懦, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留和二,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓耳胎,卻偏偏與公主長得像惯吕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子怕午,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容