布局文件中要将titlebar放置在recycleview上方同一水平线的位置
recycleview.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
//判断是当前layoutManager是否为LinearLayoutManager
// 只有LinearLayoutManager才有查找第一个和最后一个可见view位置的方法
if (layoutManager instanceof LinearLayoutManager) {
LinearLayoutManager linearManager = (LinearLayoutManager) layoutManager;
//获取第一个可见view的位置
firstVisibleItem = linearManager.findFirstVisibleItemPosition();
//获取最后一个可见view的位置
lastVisibleItem = linearManager.findLastVisibleItemPosition();
if (firstVisibleItem == 0) {
// 获取头布局
View view = recyclerView.getChildAt(0);
if (view != null) {
// 获取头布局现在的最上部的位置的相反数
int top = -view.getTop();
// 获取头布局的高度
headerHeight = view.getHeight();
Log.e("StatusDetailActivity", "firstVisibleItem:" + firstVisibleItem + "\ttop:" + top + "\theaderHeight:" + headerHeight);
// 满足这个条件的时候,是头布局在XListview的最上面第一个控件的时候,只有这个时候,我们才调整透明度
if (top <= headerHeight && top >= 0) {
// 获取当前位置占头布局高度的百分比
float f = (float) top / (float) headerHeight;
titleBar.getBackground().setAlpha((int) (f * 255));
// 通知标题栏刷新显示
titleBar.invalidate();
}
}
} else if (firstVisibleItem >0) {
titleBar.getBackground().setAlpha(255);
} else {
titleBar.getBackground().setAlpha(0);
}
}
}
});
原帖链接http://www.jb51.net/article/79817.htm