Android 仿高德地圖可拉伸的BottomSheet

前言

最近項(xiàng)目中需要用到高德地圖搜索結(jié)果后的結(jié)果展示的可拉伸控件余境。


gaode.gif

而我看到這個(gè)效果圖瞪讼,覺(jué)得這個(gè)就是一個(gè)slidingpanel盾计,但是翻閱了一些發(fā)現(xiàn)用google自帶的bottomsheet實(shí)現(xiàn)更方便

什么是BottomSheet近范?

Bottom Sheet是Design Support Library23.2 版本引入的一個(gè)類似于對(duì)話框的控件稿湿,可以暫且叫做底部彈出框吧。 Bottom Sheet中的內(nèi)容默認(rèn)是隱藏起來(lái)的搁进,只顯示很小一部分浪感,可以通過(guò)在代碼中設(shè)置其狀態(tài)或者手勢(shì)操作將其完全展開(kāi),或者完全隱藏饼问,或者部分隱藏。對(duì)于Bottom Sheet的描述可以在官網(wǎng)查詢:https://material.io/guidelines/components/bottom-sheets.html#

怎么使用揭斧?

  1. 添加依賴
    implemention 'com.android.support:design:25.3.1'
  2. 布局文件
<?xml version="1.0" encoding="utf-8"?>
<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/cl_chouti"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.amap.api.maps.MapView
            android:id="@+id/map_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center">

            <ImageView
                android:id="@+id/mark"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:src="@drawable/poi_marker_pressed" />
            <!--為了更好與定位之后的紅點(diǎn)適配此imagview只是適配用沒(méi)有意義-->
            <ImageView
                android:layout_width="30dp"
                android:layout_height="40dp"
                android:layout_below="@+id/mark" />
        </RelativeLayout>
    </FrameLayout>

    <RelativeLayout
        android:id="@+id/bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        app:behavior_hideable="true"
        app:behavior_peekHeight="160dp"
        app:layout_behavior="@string/bottom_sheet_behavior">

        <include layout="@layout/layout_bottom_sheet" />
    </RelativeLayout>
</android.support.design.widget.CoordinatorLayout>

  1. layout_bottom_sheet.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:orientation="vertical">
    <TextView
        android:id="@+id/tv_tishi"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="40dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="附近熱點(diǎn)"
        android:textSize="10sp"/>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>
  1. activity中的使用
  //底部抽屜欄展示地址
        bottomSheet = findViewById(R.id.bottom_sheet);
        behavior = BottomSheetBehavior.from(bottomSheet);

        behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
            @Override
            public void onStateChanged(@NonNull View bottomSheet, @BottomSheetBehavior.State int newState) {
                String state = "null";
                switch (newState) {
                    case 1:
                        state = "STATE_DRAGGING";//過(guò)渡狀態(tài)此時(shí)用戶正在向上或者向下拖動(dòng)bottom sheet
                        break;
                    case 2:
                        state = "STATE_SETTLING"; // 視圖從脫離手指自由滑動(dòng)到最終停下的這一小段時(shí)間
                        break;
                    case 3:
                        state = "STATE_EXPANDED"; //處于完全展開(kāi)的狀態(tài)

                        break;
                    case 4:
                        state = "STATE_COLLAPSED"; //默認(rèn)的折疊狀態(tài)
                        break;
                    case 5:
                        state = "STATE_HIDDEN"; //下滑動(dòng)完全隱藏 bottom sheet
                        break;
                }

            }

            @Override
            public void onSlide(@NonNull View bottomSheet, float slideOffset) {
//                Log.d("BottomSheetDemo", "slideOffset:" + slideOffset);
            }
        });
  1. 注意分析
    CoordinatorLayout 是Meterial Design中的一個(gè)新控件莱革,通過(guò)behavior用來(lái)協(xié)調(diào)其他組件, 實(shí)現(xiàn)聯(lián)動(dòng)峻堰,因此父布局必須是CoordinatorLayout 。
    注意到布局中盅视,RelativeLayout中的app:layout_behavior=”@string/bottom_sheet_behavior”屬性捐名,點(diǎn)進(jìn)去可以看到,這個(gè)屬性實(shí)際上是設(shè)置系統(tǒng)默認(rèn)實(shí)現(xiàn)的BottomSheet的behavior闹击。原則上來(lái)說(shuō)镶蹋,只要是可以滾動(dòng)的View,在加上了這個(gè)屬性后赏半,都可以作為BottomSheet來(lái)使用贺归,建議使用NestedScrollView或者RecyclerView。

【貢獻(xiàn)源碼地址】

如有不正確的地方断箫,歡迎在下方留言以便更正拂酣!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仲义,隨后出現(xiàn)的幾起案子婶熬,更是在濱河造成了極大的恐慌,老刑警劉巖埃撵,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赵颅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡暂刘,警方通過(guò)查閱死者的電腦和手機(jī)饺谬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鸳惯,“玉大人商蕴,你說(shuō)我怎么就攤上這事≈シⅲ” “怎么了绪商?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)辅鲸。 經(jīng)常有香客問(wèn)我格郁,道長(zhǎng),這世上最難降的妖魔是什么独悴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任例书,我火速辦了婚禮,結(jié)果婚禮上刻炒,老公的妹妹穿的比我還像新娘决采。我一直安慰自己,他們只是感情好坟奥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布树瞭。 她就那樣靜靜地躺著拇厢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晒喷。 梳的紋絲不亂的頭發(fā)上孝偎,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音凉敲,去河邊找鬼衣盾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爷抓,可吹牛的內(nèi)容都是我干的势决。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼废赞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼徽龟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起唉地,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤据悔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后耘沼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體极颓,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年群嗤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了菠隆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狂秘,死狀恐怖骇径,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情者春,我是刑警寧澤破衔,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站钱烟,受9級(jí)特大地震影響晰筛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拴袭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一读第、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拥刻,春花似錦怜瞒、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尘吗。三九已至逝她,卻和暖如春浇坐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背黔宛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工近刘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人臀晃。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓觉渴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親徽惋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子案淋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評(píng)論 25 707
  • 最近項(xiàng)目中突然要實(shí)現(xiàn)高德地圖中列表的效果,剛開(kāi)始一籌莫展险绘,以為是自定義控件還是通過(guò)手勢(shì)進(jìn)行判斷 踢京,果斷蒙了,百度谷...
    夢(mèng)_之_旅閱讀 14,386評(píng)論 0 17
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,755評(píng)論 22 665
  • 這最靠近天堂宦棺,卻又最脆弱貧瘠的土地瓣距,是我的家。 “大象果然是最有靈性的”不遠(yuǎn)處的男人注視著我說(shuō)到代咸。 小女兒格桑奔向...
    無(wú)憂_4603閱讀 335評(píng)論 0 0
  • “你相信這個(gè)世界上有樹(shù)讀者嗎呐芥?” “能讀懂樹(shù)的心思的人逻杖。” 她看了我一眼思瘟,毫不猶豫的說(shuō):“我不相信荸百。” 我想不明白...
    北青箏閱讀 221評(píng)論 0 4