要实现这样的功能,原理不难,监听滑动距离再设置标题栏的透明度
下面是监听一个带头view的list实现核心代码:
mbar是标题栏
mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView listView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (visibleItemCount == 0) { return; } int[] location = new int[2]; mIvBusinessLogo.getLocationOnScreen(location); int mgTop = location[1] - getNotificationBarHeight() - mBar.getHeight(); if (mgTop > 3) { int top = -mgTop; int headerHeight = mIvBusinessCover.getHeight() - mBar.getHeight(); if (top <= headerHeight) { float f = (float) top / (float) headerHeight; int alpha = (int) (f * 255);// Log.i("wg", "alpha = " + alpha); if (alpha < -255) { alpha = -255; } mBar.setTitleBarAlpha(alpha); } } else { mBar.setTitleBarAlpha(255); } } }); }
private int getNotificationBarHeight() { if (notificationBarHeight == 0) { Rect rect = new Rect(); this.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); notificationBarHeight = rect.top; } return notificationBarHeight; }