博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android Recyclerview仿京东,滚动屏幕标题栏渐变(启动页面动画)
阅读量:7031 次
发布时间:2019-06-28

本文共 6122 字,大约阅读时间需要 20 分钟。

首先,本文代码部分参考了conglida博主写的自定义scrollview 实现标题栏渐变:

http://download.csdn.net/download/conglida/9183723

此资源只使用自定义scrollview 实现标题栏渐变和上拉下拉刷新。如果需要listview,等其他控件,需实现onScrollListener,在onscroll中嵌入渐变代码。

再次感谢conglida博主的无私奉献!

由于Recyclerview已经推出很长时间了,不得不说这个控件确实好,可以替代scrollview、listview、gridview,功能很强大,目前我已经用这个新控件实现了标题栏渐变的效果。

本代码使用了三方开源组件:

HeaderAndFooterRecyclerView是支持addHeaderView、 addFooterView、分页加载的RecyclerView解决方案,滑动底部自动加载更多。

项目地址:https://github.com/cundong/HeaderAndFooterRecyclerView

开始正题。

布局文件:

部分代码:

CommonHeader headerView;    private void initView(View view) {        mSwipeRefreshLayout = (SwipeRefreshLayout)view.findViewById(R.id.swipe_container);        mSwipeRefreshLayout.setProgressViewOffset(false, 0, Util.dip2px(getActivity(), 92));        //设置刷新时动画的颜色,可以设置4个        mSwipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_light, android.R.color.holo_red_light, android.R.color.holo_orange_light, android.R.color.holo_green_light);        mSwipeRefreshLayout.setOnRefreshListener(this);        mSwipeRefreshLayout.setRefreshing(true);        mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);        mGridAdapter = new HotsGridAdapter(getActivity(),mHandler);        mHeaderAndFooterRecyclerViewAdapter = new HeaderAndFooterRecyclerViewAdapter(mGridAdapter);        mRecyclerView.setAdapter(mHeaderAndFooterRecyclerViewAdapter);        layoutManager = new GridLayoutManager(getActivity(), 2);        layoutManager.setSpanSizeLookup(new HeaderSpanSizeLookup((HeaderAndFooterRecyclerViewAdapter) mRecyclerView.getAdapter(), layoutManager.getSpanCount()));        layoutManager.setOrientation(GridLayoutManager.VERTICAL);        layoutManager.setSmoothScrollbarEnabled(true);        mRecyclerView.setHasFixedSize(true);        mRecyclerView.setLayoutManager(layoutManager);        headerView = new CommonHeader(getActivity(),R.layout.layout_home_header);        RecyclerViewUtils.setHeaderView(mRecyclerView, headerView);        mTitlebar = (RelativeLayout) view.findViewById(R.id.index_title_bar);        mTitlebar.setVisibility(View.VISIBLE);        mTitlebar.getBackground().setAlpha(0);        keyTextView = (TextView) mTitlebar.findViewById(R.id.tv_title);        mCurCityText = (TextView) mTitlebar.findViewById(R.id.current_city_text);        categorizeTextView = (TextView) view.findViewById(R.id.image_right);        slideShowView = (SlideShowView) headerView.findViewById(R.id.slideshowView);        moreSpecialProduct = headerView.findViewById(R.id.special_more);        mCurCityText.setOnClickListener(this);        keyTextView.setOnClickListener(this);        moreSpecialProduct.setOnClickListener(this);        categorizeTextView.setOnClickListener(this);        slideShowView = (SlideShowView) headerView.findViewById(R.id.slideshowView);        cart_btn = getActivity().findViewById(R.id.shop_cart_btn);        animation_viewGroup = createAnimLayout();        imageLoader = ImageLoader.getInstance();        mRecyclerView.addOnScrollListener(mOnScrollListener);    }

关键代码:

headerView = new CommonHeader(getActivity(),R.layout.layout_home_header);

        RecyclerViewUtils.setHeaderView(mRecyclerView, headerView);

为RecyclerView添加headerview,headview包括了所有的其他view,如下图所示,所看到的view都包含在headerView里面,不包括titlebar哦

滑动监听事件:

boolean pauseOnScroll = false, pauseOnFling=true;    private RecyclerOnScrollListener mOnScrollListener = new RecyclerOnScrollListener() {        @Override        public void onScrolled(int dx, int dy) {            super.onScrolled(dx, dy);            if (slideShowView.getHeight() > 0) {                //define it for scroll height                int lHeight = slideShowView.getHeight();                if(dy < 0){                    mTitlebar.getBackground().setAlpha(0);                }else {                    if (dy < lHeight) {                        int progress = (int) (new Float(dy) / new Float(lHeight) * 200);//255                        mTitlebar.getBackground().setAlpha(progress);                    } else {                        mTitlebar.getBackground().setAlpha(255 - 55);                    }                }            }        }        @Override        public void onBottom() {            super.onBottom();            Log.d(TAG, "onBottom");            LoadingFooter.State state = RecyclerViewStateUtils.getFooterViewState(mRecyclerView);            if(state == LoadingFooter.State.Loading) {                Log.d(TAG, "the state is Loading, just wait..");                return;            }            if (mCurPageIndex < totalPage) {                // loading more                RecyclerViewStateUtils.setFooterViewState(getActivity(), mRecyclerView, REQUEST_COUNT, LoadingFooter.State.Loading, null);                mHandler.sendEmptyMessage(GET_LIST_DATA);                Log.d(TAG, "onBottom loading");            } else {                //the end                RecyclerViewStateUtils.setFooterViewState(getActivity(), mRecyclerView, REQUEST_COUNT, LoadingFooter.State.TheEnd, null);            }        }        @Override        public void onScrollStateChanged(int newState) {            //根据newState状态做处理            if (imageLoader != null) {                switch (newState) {                    case 0:                        imageLoader.resume();                        break;                    case 1:                        if (pauseOnScroll) {                            imageLoader.pause();                        } else {                            imageLoader.resume();                        }                        break;                    case 2:                        if (pauseOnFling) {                            imageLoader.pause();                        } else {                            imageLoader.resume();                        }                        break;                }            }        }    };
代码中涉及到的封装控件下载:http://download.csdn.net/detail/jdsjlzx/9391838,没有demo,请大家自行实现效果。

具体原理请参考

conglida博主写的自定义scrollview 实现标题栏渐变:

http://download.csdn.net/download/conglida/9183723

你可能感兴趣的文章
JS常用方法(获取Class、获取元素样式、事件监听、cookie、ajax等)
查看>>
BZOJ 1084 最大子矩阵
查看>>
2018杭电多校第三场1007(凸包,极角排序)
查看>>
django中orm的简单操作
查看>>
Mybatis知识(1)
查看>>
[CentOS] 7 不执行文件 /etc/rc.d/rc.local
查看>>
模态窗口的各个属性
查看>>
10.28 (上午) 开课一个月零二十四天 (数据访问)
查看>>
为什么你应该(从现在开始就)写博客
查看>>
小技巧积累
查看>>
Java JDBC链接Oracle数据库
查看>>
Moss2010 部署命令
查看>>
Git 操作分支
查看>>
Grid search in the tidyverse
查看>>
hdu 三部曲 Contestants Division
查看>>
day22——创建表、增加数据、查询数据
查看>>
css伪元素实现tootip提示框
查看>>
关于函数指针的总结
查看>>
采用PHP函数uniqid生成一个唯一的ID
查看>>
Centos7安装32位库用来安装32位软件程序
查看>>