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滚后回来后,又隐藏它。
文章为原创,转载请注明出处。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。