本身不提供监听,看源码还是使用的AppBarLayout 的 OffsetUpdateListener。
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();、
// Add an OnOffsetChangedListener if possible
final ViewParent parent = getParent();
if (parent instanceof AppBarLayout) {
// Copy over from the ABL whether we should fit system windows
ViewCompat.setFitsSystemWindows(this, ViewCompat.getFitsSystemWindows((View) parent));
if (mOnOffsetChangedListener == null) {
mOnOffsetChangedListener = new OffsetUpdateListener();
}
//看这里,它还是使用的AppBarLayout的 mOnOffsetChangedListener
((AppBarLayout) parent).addOnOffsetChangedListener(mOnOffsetChangedListener);
// We're attached, so lets request an inset dispatch
ViewCompat.requestApplyInsets(this);
}
}
所以可以通过appbarlayout进行监听,一般这两个都是结合使用的。
mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
int scrollRangle = appBarLayout.getTotalScrollRange();
//初始verticalOffset为0,不能参与计算。
if (verticalOffset == 0) {
mTvTitle.setAlpha(0.0f);
} else {
//保留一位小数
float alpha = Math.abs(Math.round(1.0f * verticalOffset / scrollRangle) * 10) / 10;
mTvTitle.setAlpha(alpha);
}
}
});