ToolBar随ScrollView的滚动改变透明度

使用到监听回调,根据scrollY/(screen_height/3f)设置alpha,在ScrollView中设置属性:
android:clipToPadding=”false”//该控件的绘制范围是否在padding里面(false:绘制的时候范围会考虑padding,即往里面缩进)
android:clipChildren=”false”//子控件是否能超出padding的区域(ScrollView向上滑动时,child可以滑出该区域)

1.xml结构

<RelativeLayout>
<ScrollView>
....
</ScrollView>
<Toolbar/>
</RelativeLayout>

2.在自定义MyScrollView中获取ScrollView滑动的距离,通过距离/屏幕高度的百分比计算出随着滑动的alpha值,并设置监听回调,MyScrollView中的关键代码如下:

 @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        //1.获取ScrollView的Y方向的滑动距离
        int scrollY = getScrollY();
        //2.获取屏幕高度
        int heightPixels = getContext().getResources().getDisplayMetrics().heightPixels;
        //3.设置滚动范围,当scrollY < 屏幕高度的1/3时,进行设置
        float v = heightPixels / 3f;
        //4.设置滚动的百分比
        float v1 = scrollY / v;//(0-1)
        //5.透明度应为1-0
        float alpha = 1 - v1;

        //7.在必要的时候调用接口中的方法
        if(listener!=null){
            if(scrollY <= v){
                listener.onTranlucent(alpha);
            }

        }

    }

    //6.监听回调
    private TranslucentListener listener;
    public void setListener(TranslucentListener listener) {
        this.listener = listener;
    }

    public interface TranslucentListener{
        /**
         * 透明度的回调监听
         * @param alpha 0~1 透明度
         */
        public void onTranlucent(float alpha);
    }

3.在界面中给toolbar设置透明度

public class ScrollToolBarActivity extends AppCompatActivity implements MyScrollView.TranslucentListener {

    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scroll_tool_bar);
        //给myScrollView设置监听
        MyScrollView myScrollView = findViewById(R.id.scv);
        myScrollView.setListener(this);

        toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


    }

    @Override
    public void onTranlucent(float alpha) {
        //设置toolbar的透明度 这个方法在ScrollView移动时调用
        toolbar.setAlpha(alpha);
    }
}

4.在xml文件中给MyScrollView设置属性:
android:clipToPadding=”false”//该控件的绘制范围是否在padding里面(false:绘制的时候范围会考虑padding,即往里面缩进)
android:clipChildren=”false”//子控件是否能超出padding的区域(ScrollView向上滑动时,child可以滑出该区域)
避免ScrollView滑动时,Toolbar的部分出现白色区域。

    原文作者:kim_liu
    原文地址: https://www.jianshu.com/p/1c92d1252341
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞