Android ScrollView向上滑动控件顶部悬浮效果实现 * 导航栏实现悬浮置顶效果(顶部图片隐藏,下面的单选框导航悬浮)
【上滑停靠顶端的悬浮框】里的实现方法是使用两个控件,滑动时,监听ScrollView的滚动Y值, * 从而通过对两个控件的显示隐藏来实现控件的顶部悬浮。但是实际应用场景中, * 有可能需要悬浮的控件里面的内容是比较多的,如果通过显示隐藏的方式来实现的话, * 操作控件里的内容时,需要重复定义两套变量,对控件里的内容进行修改时也是要操作再次,非常麻烦。 本文的方法是通过addView和removeView来实现的
当外面嵌套一层ScrollView后,就能做上下或左右滑动,但能滑动多少系统不知道, * 这时就需要你给计算出一个滑动区域给ScrollView。
知识点:
1、当ScrollView垂直滚动视图中嵌套ListView时,ListView必须重写onMeasure方法,返回高度和大小,否则,只会显示一行布局!!!
2、滑动事件会有冲突:重写onInterceptTouchEvent方法(或者其他事件的方法),根据情况获得事件!
首先继承ScrollView类:
public class HoveringScrollview extends ScrollView {
private OnScrollListener onScrollListener;
/**
* 主要是用在用户手指离开本view,本view还在继续滑动,我们用来保存Y的距离,然后做比较
*/
private int lastScrollY;
public HoveringScrollview(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
/**
* 设置滚动接口
*
* @param onScrollListener
*/
public void setOnScrollListener(OnScrollListener onScrollListener) {
this.onScrollListener = onScrollListener;
}
/**
* 用于用户手指离开MyScrollView的时候获取MyScrollView滚动的Y距离,然后回调给onScroll方法中
*/
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
int scrollY = HoveringScrollview.this.getScrollY();
// 此时的距离和记录下的距离不相等,在隔6毫秒给handler发送消息?
if (lastScrollY != scroll