我打算做一件很蛋疼的事,那就是scrollview嵌套scrollview(其实不是真的scrollview,而是一个用scrollview做的瀑布流控件),外层scrollview的作用是把页面的头部给滚出屏幕,然后把内容卡在顶部(如果知道美丽说的话,请参考美丽说“我”这个模块的页面效果(要登录才有)一模一样的需求),但是因为事件冲突,我打算重写scrollview,监听scrollview的滚动距离来,只要高过头部就把外层的scrollview的触摸监听给干掉。不过现在遇到个问题,就是不知道scrollview怎么实时监控他的滚动距离,用getscroll方法试过,用computeVerticalScrollOffset方法试过,不过都只有在手指离开之后才能获得距离,但不到划过去就卡住的效果,不知道有没有什么方法能够实时获得scrollview的滚动位置的呢?求指点。
ps:如果有大神知道怎么做到美丽说那种效果的更好,求指导
scrollView.setOnTouchListener(this);
}
@SuppressLint("NewApi")
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
// 可以监听到ScrollView的滚动事件
System.out.println(scrollView.getScrollY());
}
return false;
}
/**
* 在Handler中进行图片可见性检查的判断,以及加载更多图片的操作。
*/
private static Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
MyScrollView myScrollView = (MyScrollView) msg.obj;
int scrollY = myScrollView.getScrollY();
// 如果当前的滚动位置和上次相同,表示已停止滚动
if (scrollY == lastScrollY) {
// 当滚动的最底部,并且当前没有正在下载的任务时,开始加载下一页的图片
if (scrollViewHeight + scrollY >= scrollLayout.getHeight()
&& taskCollection.isEmpty()) {
myScrollView.loadMoreImages();
}
myScrollView.checkVisibility();
} else {
lastScrollY = scrollY;
Message message = new Message();
message.obj = myScrollView;
// 5毫秒后再次对滚动位置进行判断
handler.sendMessageDelayed(message, 5);
}
};