滑动改变toolbar透明度

来源:互联网 发布:过期未注册域名查询 编辑:程序博客网 时间:2024/04/30 19:55

因为根据布局的滑动改变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中首先定义了两个全局变量,然后再如下方法中赋值

@Overridepublic 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方法中完成最后的监听

@Overridepublic 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 0