ActionBar 滑动改变透明度

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

    

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 滑动改变透明度)