Android中MaterialDesign使用 (五)自定義Behavior實(shí)現(xiàn)UC頂欄效果

Android中MaterialDesign使用 (五)CoordinatorLayout之自定義Behavior

Android中MaterialDesign使用 (一)TabLayout+Fragment實(shí)現(xiàn)頂部選項(xiàng)卡

Android中MaterialDesign使用 (二)Navigation+Drawerlayout+Toolbar實(shí)現(xiàn)簡單側(cè)滑菜單

Android中MaterialDesign使用 (三)SnackBar的使用

Android中MaterialDesign使用 (四)CoordinatorLayout初識(shí):AppBarLayout的基本屬性

這里主要實(shí)現(xiàn)的是用一個(gè)簡單的自定義Behavior實(shí)現(xiàn)一個(gè)像UC瀏覽器頂欄那樣的效果

直接上效果圖

2909848-eb2a977fcc0e8779.gif

同樣使用Tablayout,首先需要在項(xiàng)目中加入Design包

dependencies {
    compile 'com.android.support:design:24.1.1' 
}

主布局代碼:main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="zhengliang.com.animatorpath.Main2Activity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:scaleType="centerCrop"
                android:src="@mipmap/main_bg"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.9"/>

            <FrameLayout
                android:id="@+id/framelayout"
                android:layout_width="match_parent"
                android:layout_height="120dp"
                android:layout_gravity="bottom"
                android:background="@color/primary"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.3">

                <LinearLayout
                    android:id="@+id/linearlayout_title"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:orientation="vertical"
                    >

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:gravity="bottom|center"
                        android:text="LOVE"
                        android:textColor="@android:color/white"
                        android:textSize="24sp"
                        />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:layout_marginTop="4dp"
                        android:text="I love you clover"
                        android:textColor="@android:color/white"
                        />

                </LinearLayout>

            </FrameLayout>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none"
        app:behavior_overlapTop="20dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <android.support.v7.widget.CardView
            android:id="@+id/card_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="8dp"
            app:cardElevation="8dp"
            app:contentPadding="16dp"
            app:cardCornerRadius="5dp"
            >

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:lineSpacingExtra="8dp"
                android:text="@string/lorem"
                android:textSize="18sp"
                android:id="@+id/textView" />
        </android.support.v7.widget.CardView>

    </android.support.v4.widget.NestedScrollView>

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        android:background="@color/primaryDark"
        app:layout_anchor="@id/framelayout"
        app:theme="@style/ThemeOverlay.AppCompat.Dark"
        >
    </android.support.v7.widget.Toolbar>

    <TextView
    android:id="@+id/tv_title"
    android:textColor="#fff"
    android:textSize="18sp"
    android:gravity="center"
    android:text="UC頭條"
    android:background="@color/primaryDark"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    app:layout_behavior=".DrawerBehavior"
    />

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

Behavior是Android新出的Design庫里新增的布局概念。Behavior只有是CoordinatorLayout的直接子View才有意義拟赊》惹猓可以為任何View添加一個(gè)Behavior荣月。Behavior是一系列回調(diào)。讓你有機(jī)會(huì)以非侵入的為View添加動(dòng)態(tài)的依賴布局实抡,和處理父布局(CoordinatorLayout)滑動(dòng)手勢(shì)的機(jī)會(huì)。不過官方只有少數(shù)幾個(gè)Behavior的例子。對(duì)于理解Behavior實(shí)在不易纷责。開發(fā)過程中也是很多坑,下面總結(jié)一下CoordinatorLayout與Behavior撼短。

定義繼承基類:

public class DrawerBehavior extends CoordinatorLayout.Behavior<T> {
     public DrawerBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
}

繼承CoordinatorLayout.Behavior<T>這里是一個(gè)泛型,泛型傳遞的是你需加入效果的View,比如我這里是給TextView加效果泛型就指定位TextView

實(shí)現(xiàn):兩個(gè)必須的方法

 @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, TextView child, View dependency) {
        return dependency instanceof Toolbar;
    }

@Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, TextView child, View dependency) {
        return true;

    }

上面的兩個(gè)方法根據(jù)名字就看出 layoutDependsOn()是View依賴于的控件是什么,我這里是依賴于Toolbar所以寫法就如上,其它的根據(jù)需要而變;第二方法是當(dāng)依賴的View發(fā)生變化時(shí)調(diào)用,自定義Behavior的主要邏輯就在這個(gè)方法中處理!

下面貼上該效果的代碼:

/**
 * Created by zhengliang on 2016/10/10 0010.
 */

public class DrawerBehavior extends CoordinatorLayout.Behavior<TextView> {
    private int mStartY;

    public DrawerBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, TextView child, View dependency) {
        return dependency instanceof Toolbar;
    }

    @Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, TextView child, View dependency) {
        //記錄開始的Y坐標(biāo)  也就是toolbar起始Y坐標(biāo)
        if (mStartY==0){
            mStartY = (int) dependency.getY();
        }

        //計(jì)算toolbar從開始移動(dòng)到最后的百分比
        float percent = dependency.getY()/mStartY;
        //改變child的坐標(biāo)(從消失再膳,到可見)
        child.setY(child.getHeight()*(1-percent) - child.getHeight());
        child.startAnimation(new AlphaAnimation(1,(1-percent)));

        return true;

    }
}

代碼注釋很全就不解釋了,寢室馬上熄燈了,抓緊時(shí)間,哈哈!

自定義的Behavior寫好以后,需要在使用這個(gè)Behavior的View加上:app:layout_behavior屬性

諾:

    ...
        app:layout_behavior=".DrawerBehavior"
    ...

后面跟的值就是你自定義參數(shù)的類名:如果像我這樣不行請(qǐng)加上完整的包名..

時(shí)間剛好...

印象丶亮仔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市曲横,隨后出現(xiàn)的幾起案子喂柒,更是在濱河造成了極大的恐慌,老刑警劉巖禾嫉,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灾杰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡熙参,警方通過查閱死者的電腦和手機(jī)艳吠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尊惰,“玉大人讲竿,你說我怎么就攤上這事∨牛” “怎么了题禀?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長膀捷。 經(jīng)常有香客問我迈嘹,道長,這世上最難降的妖魔是什么全庸? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任秀仲,我火速辦了婚禮,結(jié)果婚禮上壶笼,老公的妹妹穿的比我還像新娘神僵。我一直安慰自己,他們只是感情好覆劈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布保礼。 她就那樣靜靜地躺著沛励,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炮障。 梳的紋絲不亂的頭發(fā)上目派,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音胁赢,去河邊找鬼企蹭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛智末,可吹牛的內(nèi)容都是我干的谅摄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼吹害,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼螟凭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起它呀,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棒厘,沒想到半個(gè)月后纵穿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奢人,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年谓媒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片何乎。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡句惯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出支救,到底是詐尸還是另有隱情抢野,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布各墨,位于F島的核電站指孤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏贬堵。R本人自食惡果不足惜恃轩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望黎做。 院中可真熱鬧叉跛,春花似錦、人聲如沸蒸殿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至敞掘,卻和暖如春叽掘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背玖雁。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工更扁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赫冬。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓浓镜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親劲厌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子膛薛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,771評(píng)論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,729評(píng)論 22 665
  • 1哄啄、寫簡歷的誤區(qū) 簡歷的標(biāo)題:把“簡歷”二字作為簡歷標(biāo)題 把自己會(huì)的一股腦都往上寫 認(rèn)為沒有可寫的 寫不想關(guān)的 信...
    雨山子皿閱讀 832評(píng)論 1 2
  • 這周學(xué)習(xí)了灰犀牛-如何應(yīng)對(duì)大概率危機(jī)這本書咨跌,也讓自己有了更多思考收獲。 灰犀牛指的是可預(yù)測(cè)的有著重大影響的大概率事...
    張金坤體重管理師閱讀 500評(píng)論 0 1
  • 早上起床時(shí)硼婿,一陣陣的涼意锌半,風(fēng)的方向也悄悄地改變了,秋真是來了寇漫。 在南方刊殉,從來沒有見過滿地落葉的秋天。反倒是春天時(shí)街...
    小螢子閱讀 493評(píng)論 18 11