ScrollView实现下滑隐藏标题栏,上滑显示

在项目实现的过程中,需要实现,根据ScrollView的滚动来设置标题栏的透明度进行显示和隐藏,首先,我们需要自定义ScrollView进行重写onScrollChanged方法

/**
 * 带滚动监听的scrollview
 *
 */
public class ObservableScrollView extends ScrollView{

    /**
     * 接口回调
     */
    private ScrollViewListener scrollViewListener = null;
    public interface ScrollViewListener {
        void onScrollChanged(ObservableScrollView scrollView, int x, int y,
                             int oldx, int oldy);

    }
    public void setScrollViewListener(ScrollViewListener scrollViewListener) {
        this.scrollViewListener = scrollViewListener;
    }

    /**
     * 重写的onScrollChanged方法监听坐标
     * 这个监听在源码中没有写成回调的样子,
     * 只是写成了方法的样子,由于修饰这个方法的修饰符是protected,
     *(protected只能在本类,子类,同一包中调用),
     * 所以拿到ScrollView对象后在无法activity中调用此方法,
     * 所以只能重写后,子类中自动调用,
     * 所以要想在activity调用,
     * 就要写回调,
     * 上面就是我写的回调
     * 在Android源码中这种写法很多,在很多控件中都有
     */
    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        super.onScrollChanged(x, y, oldx, oldy);
        if (scrollViewListener != null) {
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
        }
    }

    /**
     *构造方法(在这里没用)
     */
    public ObservableScrollView(Context context) {
        super(context);
    }

    public ObservableScrollView(Context context, AttributeSet attrs,
                                int defStyle) {
        super(context, attrs, defStyle);
    }

    public ObservableScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
}

然后我们需要在布局文件中进行引用这个我们所自定义的ScrollView而不用Android官方的ScrollView!最后我们需要做的就是在改布局所承载的类当中实现我们所需要的功能,重写一个方法,然后在进入该界面的时候就加载该方法

  private void initTitle() {
        // 获取顶部图片高度后,设置滚动监听
        ViewTreeObserver vto = index_banner.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                index_banner.getViewTreeObserver().removeGlobalOnLayoutListener(
                        this);
                imageHeight = index_banner.getHeight();
                pull_index.setScrollViewListener(new ObservableScrollView.ScrollViewListener() {
                    @Override
                    public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) {
                        if (y <= 0) {
                            //设置标题栏背景颜色,白色透明
                            layout_home_title.setBackgroundColor(Color.argb(0, 255, 255, 255));
                            //设置文字颜色,白色透明
                            tv_home_title.setTextColor(Color.argb(0, 255, 255, 255));
                            Log.e("111", "y <= 0");
                        } else if (y > 0 && y <= imageHeight) {
                            // 只是layout背景透明,主题色不透明
                            layout_home_title.setBackgroundColor(Color.argb(255, 80, 150, 255));
                            //设置文字颜色,白色,不透明
                            tv_home_title.setTextColor(Color.argb(255, 255, 255, 255));
                            Log.e("111", "y > 0 && y <= imageHeight");
                        } else {
                            //主题色不透明
                            layout_home_title.setBackgroundColor(Color.argb(255, 80, 150, 255));
                            //设置文字颜色,白色,不透明
                            tv_home_title.setTextColor(Color.argb(255, 255, 255, 255));
                            Log.e("111", "else");
                        }
                    }
                });

            }
        });
    }

你可能感兴趣的:(ScrollView实现下滑隐藏标题栏,上滑显示)