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

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

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

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

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

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 方便处理滚动变化时的事件事件

具体使用时就很简单了rem

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滚后回来后,又隐藏它。get


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

相关文章
相关标签/搜索