工具栏折叠时显示视图

时间:2015-07-23 18:48:55

标签: android android-toolbar android-coordinatorlayout android-collapsingtoolbarlayout

我的活动包含CoordinatorLayoutAppBarLayoutCollapsingToolbarLayoutToolbar。所以,基本上,滚动RecyclerView时会崩溃的视图。

我需要做的是在展开展开的布局视图时由于折叠而显示自定义视图。

这是我的布局:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                                 xmlns:app="http://schemas.android.com/apk/res-auto"
                                                 android:layout_width="match_parent"
                                                 android:layout_height="match_parent"
                                                 android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="192dp"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="#2196F3"
            app:expandedTitleMarginBottom="32dp"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <include
                android:id="@+id/header"
                layout="@layout/header_big_first_screen"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                app:layout_collapseMode="parallax"/>

            <android.support.v7.widget.CollapsingToolbarLayout
                android:id="@+id/anim_toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

                <TextView

                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:text="Hello!"/>


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


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

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

    <android.support.v7.widget.RecyclerView
        android:id="@+id/categories_recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>


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

最后,当工具栏展开时,将显示加载了该元素的视图。当它折叠时它没有。当它消失时,应显示TextView内的Toolbar。目前它一直显示。

我一直在查看CollapsingToolbarLayout的事件,当它改变大小时添加一个监听器,这样我就可以检查它是否小于一个值并显示该视图。

这可能有点难以解释,但我相信我已经说清楚了。我一直在谷歌搜索,找不到任何人试图这样做。

2 个答案:

答案 0 :(得分:53)

查看CollapsingToolbarLayout来源,通过OnOffsetChangedListener上的AppBarLayout触发内容网格动画。所以你可以添加另一个来触发文本视图上的alpha动画:

mListener = new AppBarLayout.OnOffsetChangedListener() {
    @Override
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
        if(collapsingToolbar.getHeight() + verticalOffset < 2 * ViewCompat.getMinimumHeight(collapsingToolbar)) {
            hello.animate().alpha(1).setDuration(600);
        } else {
            hello.animate().alpha(0).setDuration(600);
        }
    }
};

appBar.addOnOffsetChangedListener(mListener);

答案 1 :(得分:0)

更好的方法是重写(function(global, $) { global.RP = domId => { return new RangePlayer(domId); }; function RangePlayer(domId) { // var vidId = document.getElementById("vidId").innerHTML; $("#" + domId).wrap(`<div id="video-box"> <div class="ctrl-box"> <div class="controler"> <i class="fas fa-play-circle" id="playVid"></i> <div class="dragger-case"> <div id="vid-range"><div id="v-range"></div></div> </div> <div> <i class="fas fa-volume-up" id="ctrl-sound"></i> <div id="vid-volume" style="display:none;"></div> </div> </div> </div> </div> `); $("#" + domId).addClass("video-dom"); vid = document.getElementById(domId); vid.controls = false; vid.volume = 0.4; let vidProp = {}; var startVid; vid.ontimeupdate = function() { // if (vidProp.start !== 0) { if (vidPos() >= vidProp.end) { vid.pause(); vid.currentTime = vidProp.end; $("#playVid").removeClass("fa-pause-circle"); $("#playVid").addClass("fa-play-circle"); vidProp.mode = "off"; $("#v-range").slider("value", vidProp.start); /* $('#playVid').addClass('fa-play-circle'); $('#playVid').removeClass('fa-pause-circle'); */ } $("#v-range").slider("value", vid.currentTime); /* if (vidPos() <= vidProp.start) { vid.currentTime = vidProp.start; $('#playVid').removeClass('fa-play-circle'); $('#playVid').addClass('fa-pause-circle'); }*/ // } }; function vidPos() { return vid.currentTime; } $("#ctrl-sound").click(() => { $("#vid-volume").toggle(); }); $("#playVid").click(() => { if (vidProp.mode === "off") { vidProp.mode = "on"; $("#v-range").slider("value", vidProp.start); vid.currentTime = vidProp.start; vid.play(); $("#playVid").toggleClass("fa-play-circle fa-pause-circle"); } else if (vidProp.mode === "on") { vid.pause(); vidProp.mode = "pause"; $("#playVid").toggleClass("fa-play-circle fa-pause-circle"); } else if (vidProp.mode === "pause") { vid.play(); vidProp.mode = "on"; $("#playVid").toggleClass("fa-play-circle fa-pause-circle"); } }); vid.onloadeddata = function() { $("#" + domId).show(); vidProp = { start: 0.001, end: vid.duration, mode: "on" }; $("#vid-range").slider({ orientation: "horizontal", range: true, min: 0.01, max: vid.duration, step: 0.01, values: [1.5, vid.duration-1.5 ], slide: function(event, ui) { $("#RPvidStart").val(ui.values[0]); $("#RPvidEnd").val(ui.values[1]); vidProp.start = ui.values[0]; vidProp.end = ui.values[1]; if (ui.handleIndex === 0) { vid.currentTime = ui.values[0]; } else if (ui.handleIndex === 1) { vid.currentTime = ui.values[1]; } $("#v-range").slider("option", { max: vidProp.end, min: vidProp.start }); startVid = vidProp.start; var vidRange = [vidProp.start,vidProp.end]; console.log(startVid); $.ajax({ url: "/dashboard/storyboard/ajax/get_video_range/", // form action url type: "post", // form submit method get/post dataType: "json", // request type html/json/xml traditional: true, data: { range: vidRange, }, success: function(result) { if (result.error) { alert.html(result.html).fadeIn(); console.log(e); } else { alert.html(result.html).fadeIn(); } } }); }, change: function(event, ui) { vid.pause(); vid.currentTime = ui.value; $("#playVid").removeClass("fa-pause-circle"); $("#playVid").addClass("fa-play-circle"); vidProp.mode = "off"; $("#v-range").slider("option", { max: vidProp.end, min: vidProp.start }); /* if (ui.handleIndex === 0) { vid.play(); } */ } }); $("#v-range").slider({ orientation: "horizontal", value: vidProp.start, max: vidProp.end, min: vidProp.start, step: 0.01, slide: function(event, ui) { vidProp.mode = "pause"; vid.currentTime = ui.value; } }); $("#v-range").appendTo( $("#vid-range .ui-slider-range.ui-corner-all.ui-widget-header") ); $("#vid-volume").slider({ orientation: "vertical", min: 0, max: 1, step: 0.01, value: 0.4, slide: function(event, ui) { vid.volume = ui.value; }, change: function(event, ui) {} }); *$("#saveTrim").click(function(){ console.log("saved");* }); }; } })(window, $); 方法,该方法每次在CollapsingToolbarLayout的{{1}内部调用时,而不是尝试在稀松布应该显示(折叠)或不显示(展开)时进行复制。 },并向其添加一个侦听器:

setScrimsShown