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