美文网首页安卓开发博客Android UIandroid开发技巧
ToolBar随ScrollView的滚动改变透明度

ToolBar随ScrollView的滚动改变透明度

作者: kim_liu | 来源:发表于2018-06-25 21:49 被阅读79次

    使用到监听回调,根据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的部分出现白色区域。

    相关文章

      网友评论

      本文标题:ToolBar随ScrollView的滚动改变透明度

      本文链接:https://www.haomeiwen.com/subject/bahuyftx.html