滑动改变toolbar透明度

因为根据布局的滑动改变toolbar的透明度在各大app上都比较常见,而且最近公司项目也要这个效果,所以就去实现了一下,效果不错,所以就记录一下这个实现.

因为我用的布局是ScrollView,所以我想着在他的滑动监听里去实现,可突然发现它并没有现成的监听滑动的方法,但是有一个onScrollChanged方法,所以就自定义一个MyScrollView类,该类核心代码如下:

在他的onScrollChanged方法中实现代码如下:

//暴露接口
public void setmOnScrollChangedListener(OnScrollChangedListener mOnScrollChangedListener) {
    this.mOnScrollChangedListener = mOnScrollChangedListener;
}

if(mOnScrollChangedListener != null)

{

 mOnScrollChangedListener.onScrollChanged(this,l,t,oldl,oldt);//自定义接口中的方法
 }

public interface OnScrollChangedListener {
    void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt);
}

在我的PurchaseDetailActivity中首先定义了两个全局变量,然后再如下方法中赋值

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    scrollView.scrollTo(0,0);
    headerHeight = getResources().getDimension(R.dimen.y500);//顶部高度
    minHeaderHeight = getResources().getDimension(R.dimen.abc_action_bar_default_height_material);//顶部最低高度,即Bar的高度
    toolbar.getBackground().mutate().setAlpha(0);
}


在最核心的onScrollChanged方法中完成最后的监听

@Override
public void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt) {
    //Y轴偏移量
    float scrollY = who.getScrollY();
    //Log.e("===onScrollChanged===","======="+scrollY);
    //变化率
    float headerBarOffsetY = headerHeight - minHeaderHeight;//Toolbar与header高度的差值
    //Toolbar背景色透明度
    if (scrollY==0)
    {
        toolbar.getBackground().mutate().setAlpha(0);
    }
    else if (scrollY>0)
    {
        float offset = 1 - Math.max((headerBarOffsetY - scrollY) / headerBarOffsetY, 0f);
        toolbar.getBackground().mutate().setAlpha((int) (offset * 255));
    }
    else
    {
        toolbar.getBackground().mutate().setAlpha(0);
    }
}


罗辑不难,而且也挺好实现的.一开始是用材料设计,可结果发现和预期的效果不对,用过的人会知道用三大布局结合使用是达到了收缩的效果.



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值