Android 滚动悬停需求的简单实现

503 查看

Android 滚动悬停需求的简单实现

有一种需求,需要某些按钮或者信息栏,随着界面的滚动,悬停在屏幕上方,即不随着其他信息一起隐藏,对于这种需求,有一个简单的实现,就是设置两个一样的控件,然后判断原来随着滚动的那个控件的上边缘是否被隐藏了,如果是,则在悬浮位置显示第二个控件(又或者只用一个控件,第一个隐藏了自后就把它从滚动的容器中remove出来,然后添加到新的位置去)。

下面来简单展示下实现方法:

首先实现一个监听容器类,ListeningScrollView

public class ListeningScrollView extends ScrollView {
    private OnScrollChangedListener onScrollChangedListener;

    public ListeningScrollView(Context context) {
        super(context);
    }

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

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

    public interface OnScrollChangedListener {
        public void onScrollChanged(int x, int y, int oldxX, int oldY);
    }

    /**
     * 
     * @param onScrollChangedListener
     */
    public void setOnScrollListener(OnScrollChangedListener onScrollChangedListener) {
        this.onScrollChangedListener = onScrollChangedListener;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldX, int oldY) {
        super.onScrollChanged(x, y, oldX, oldY);
        if (onScrollChangedListener != null) {
            onScrollChangedListener.onScrollChanged(x, y, oldX, oldY);
        }
    }
}

这个类为scrollView加了一个OnScrollChangedListener 方便处理滚动变化时的事件

具体使用时就很简单了

final ListeningScrollView vScroll = (ListeningScrollView) findViewById(R.id.scrollview);
vScroll.setOnScrollListener(new OnScrollChangedListener() {
        @Override
        public void onScrollChanged(int x, int y, int oldxX, int oldY) {
        vLayoutFloat.setVisibility(y > vLayout.getTop() ?View.VISIBLE : View.GONE);
    }
});

两个layout功能一样,这里是当vLayout的上边缘,小于scrollview的上边缘,即被隐藏的情况下,悬浮的vLayoutfloat则显示出来,当vLayout滚后回来后,又隐藏它。


文章为原创,转载请注明出处。