得到ListView的滑动距离来设置上方菜单的透明度变化

来源:互联网 发布:淘宝热卖排行榜 编辑:程序博客网 时间:2024/05/29 11:42

项目中需要实现当界面滑动的时候,菜单栏背景从透明到不透明的变化,其实最简单的实现就是自定义一个ScrollView或者ListView控件,但是因为这个界面有用到PullToRefresh这个布局,并且是PullToRefreshList,所以只能在不改变ListView的情况下去实现,所以我这个情况算是特例吧。

首先界面设置是最上方是一个ViewPager,然后菜单栏是覆盖在这个ViewPager上方,并且透明,这样后面计算高度的时候要记得减去菜单栏本身的高度。

先写一个方法来判断当前ListView滑动到了哪里

/**     * 判断是否是第一行     * @return     */    private boolean isScroll()    {        if(mListView.getFirstVisiblePosition() == 1 || mListView.getFirstVisiblePosition() == 0)        {            return true;        }        return false;    }

mListView.getFirstVisiblePosition()这个方法是得到当前行数,当行数为1的时候,那么肯定是在滑动ViewPager并且ViewPager没有消失,但是当一开始进入界面的时候,mListView.getFirstVisiblePosition()为0,所以判断条件为1或者0时。

再写一个方法来得到高度比例

/**     * 得到高度比例     * @return     */    private float getScrollY()    {        View c = mListView.getChildAt(0);        if (c == null)        {            return 0;        }        int firstVisiblePosition = mListView.getFirstVisiblePosition();        if(firstVisiblePosition == 1 || firstVisiblePosition == 0)        {            //如果可见的是第一行或第二行,那么开始计算距离比例            float top = c.getTop();            //当第一行已经开始消失的时候,top是为负数的,所以取正            top = Math.abs(top);            //48为菜单栏的高度,单位为dp            //得到的高度为ViewPager的高度减去菜单栏高度,即为最大可滑动距离            float height = c.getHeight() - dpTopx(48);            float y = top / height;            return y;        }else        {            return 0;        }    }

附上dp转px方法:

/**     * 获取手机屏幕密度,将dp值转换为px     *      * @param dpValue     * @param activity     * @return px     */    private int dpTopx(float dpValue)    {        // 获取手机屏幕密度        final float scale = getResources().getDisplayMetrics().density;        return (int) (dpValue * scale + 0.5f);    }

这样,在先判断是否第一行仍然可见的情况下,再将得到的比例进行处理,当第一行,也就是ViewPager不可见之后,不再得到比例,停止了透明度的变化。

mListView.setOnScrollListener(new AbsListView.OnScrollListener()        {            @Override            public void onScrollStateChanged(AbsListView view, int scrollState)            {            }            @Override            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)            {                if(isScroll())                {                    float scrollY = getScrollY();                    Log.e("scrollY", "" + scrollY);                    if(scrollY <= 1)                    {                        int alpha = (int) (255 * scrollY);                        mallactivity_toolbar_layout.setBackgroundColor(Color.argb(alpha, 0xfd, 0x91, 0x5b));                    }                }            }        });

因为我界面的要求是将菜单栏从透明变为不透明,且一开始一些控件就在上面,所以我修改的是菜单栏的背景从透明变为不透明,控件并不改变。

这样就完成了最简单的一个菜单栏的透明度的改变。

下拉刷新

松开隐藏菜单栏

默认布局样式

滑动改变菜单栏透明度

滑动改变菜单栏透明度

达到或超出不再改变

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 邮储银行怎么办金卡 农机被交警查怎么办 广联达识别板筋负筋重叠怎么办 掌上品的钱怎么办 财务纠纷被起诉怎么办 牙齿补后疼痛怎么办 牙齿表面蛀了怎么办 虫牙全掉了怎么办 牙齿蛀光了怎么办 虫牙全部掉完了怎么办 不喜欢向人请教怎么办 单位不交公积金怎么办 电锯链条掉了怎么办 天津公积金怎么办外地转入 学籍档案涂抹了怎么办 气相点火失败怎么办 小米闹钟声音小怎么办 河北省监理员证怎么办 买的商铺烂尾了怎么办 钢表带被磨花了怎么办 资料员到期了怎么办 八大员挂靠社保怎么办 安许证三类人员不足了怎么办 考试准考证号写错了怎么办 科目一失约两次怎么办 钢筋送检两次不合格怎么办 公路原材料抽检不合格怎么办 混凝土回弹强度不合格怎么办 毕业证照片太丑怎么办 政审时找不到档案怎么办 劳动解除书开不出来怎么办 双流办健康证怎么办 户口本人数满了怎么办 二建有效期到了怎么办 二级建造师到期怎么办 网上选车牌号后怎么办 政府拖欠水利工程款怎么办 重庆造价员到期了怎么办 枕大神经发炎怎么办 塑钢推拉窗下沉怎么办 网上买东西数量不够怎么办