我的活动包含CoordinatorLayout
,AppBarLayout
,CollapsingToolbarLayout
和Toolbar
。所以,基本上,滚动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
的事件,当它改变大小时添加一个监听器,这样我就可以检查它是否小于一个值并显示该视图。
这可能有点难以解释,但我相信我已经说清楚了。我一直在谷歌搜索,找不到任何人试图这样做。
答案 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