美文网首页
ActionBar 滑动改变透明度

ActionBar 滑动改变透明度

作者: TTTqiu | 来源:发表于2016-09-12 12:46 被阅读59次

    1. 设置 actionbar 悬浮于 view 之上。

        <style name="MyTheme.OverlayActionBar" parent="AppTheme">
            <item name="windowActionBarOverlay">true</item>
        </style>
    

    2. 设置滑动监听。

    • API 23 以上才有 setOnScrollChangeListener()。
      所以需要自己写一个滑动监听。
    1. 创建一个 ScrollView 等的子类。
    2. 在其中创建一个 MyOnScrollChangedListener 接口,接口包含 myOnScrollChanged() 方法。
    3. 创建 setMyOnScrollChangedListener() 方法,参数为一个 MyOnScrollChangedListener 对象 listener。
    4. 复写父类的 onScrollChanged() 方法,在其中让 listener 回调 myOnScrollChanged() 方法。
    5 使用时,在 myOnScrollChanged() 里写具体滑动事件。

    MyScrollView:

    package com.ttt.zhihudaily.util;
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.webkit.WebView;
    import android.widget.ScrollView;
    
    public class MyScrollView extends ScrollView{
    
        private MyOnScrollChangedListener listener;
    
        public MyScrollView(Context context) {
            super(context);
        }
    
        public MyScrollView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
    *   public interface MyOnScrollChangedListener{
    *       void myOnScrollChanged(int scrollX, int scrollY, int oldScrollX, int oldScrollY);
    *   }
    
    *   public void setMyOnScrollChangedListener(MyOnScrollChangedListener listener){
    *       this.listener=listener;
        }
    
        @Override
        protected void onScrollChanged(int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
            super.onScrollChanged(scrollX, scrollY, oldScrollX, oldScrollY);
    *       listener.myOnScrollChanged(scrollX,scrollY,oldScrollX,oldScrollY);
        }
    }
    

    3. 给 actionbar 设置背景,在滑动监听里改变背景透明度。

        actionBar=getSupportActionBar();
        colorDrawable=new ColorDrawable(getResources().getColor(R.color.actionBarColor));
        actionBar.setBackgroundDrawable(colorDrawable);
        ......
        myScrollView =(MyScrollView)findViewById(R.id.my_scroll_view);
        myScrollView.setMyOnScrollChangedListener(new MyScrollView.MyOnScrollChangedListener() {
            @Override
            public void myOnScrollChanged(int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                if(scrollY<500){
                    float alpha=(float) (500-scrollY)/500;
                    colorDrawable.setAlpha((int)(alpha*255));
                }else {
                    colorDrawable.setAlpha(0);
                }
            });
    

    相关文章

      网友评论

          本文标题:ActionBar 滑动改变透明度

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