How to make a ActionBar like Google Play that fades in when scrolling

前端 未结 8 900
-上瘾入骨i
-上瘾入骨i 2020-11-27 09:06

How to make transparent or translucent ActionBar like Google Play that fades in or out when scrolling using windowActionBarOverlay?

Check the f

8条回答
  •  失恋的感觉
    2020-11-27 09:47

    Using AbsListView scroll listener we can achieve for listview simply without using other complicated library or ScrollView

    set scroll listener to list view

    public class PagedScrollListener implements AbsListView.OnScrollListener {
        private ActionBar mActionBar;
        private View mTopHideView; // represent header view
    
         @Override
        public void onScrollStateChanged(final AbsListView view, final int scrollState) {
            mScrollState = scrollState;
        }
    
        @Override
        public void onScroll(final AbsListView view, final int firstVisibleItem, final int visibleItemCount, final int totalItemCount) {
    
            if (mActionBar != null && mTopHideView != null && mListView != null) {
                Log.i(TAG, getScrollY() + "");
                int currentY = getScrollY();
    
                final int headerHeight = mTopHideView.getHeight() - mActionBar.getHeight();
                final float ratio = (float) Math.min(Math.max(currentY, 0), headerHeight) / headerHeight;
                final int newAlpha = (int) (ratio * 255);
                Log.i(TAG, newAlpha + " alpha");
                mActionBarDrawaqble.setAlpha(newAlpha);
    }}
    
    
    public void setActionBarRefernce(ActionBar actionBar, View topHideView, float actionBarHeight, ListView listView) {
            mActionBar = actionBar;
            mActionBarHeight = actionBarHeight;
            mTopHideView = topHideView;
            mListView = listView;
            mActionBarDrawaqble = new ColorDrawable(ContextCompat.getColor(mContext, R.color.google_plus_red));
            mActionBar.setBackgroundDrawable(mActionBarDrawaqble);
            mActionBarDrawaqble.setAlpha(0);
        }
    
       public int getScrollY() {
            View c = mListView.getChildAt(0);
            if (c == null) {
                return 0;
            }
    
            int firstVisiblePosition = mListView.getFirstVisiblePosition();
            int top = c.getTop();
    
            int headerHeight = 0;
            if (firstVisiblePosition >= 1) {
                headerHeight = mTopHideView.getHeight();
            }
    
            return -top + firstVisiblePosition * c.getHeight() + headerHeight;
        }
    
    } 
    

    // Note : Don't forget to call **setActionBarRefernce method ** of custom listener

提交回复
热议问题