Android 如何在ScrollView中设置onScrollStop事件
我正在开发一个新闻阅读器类型的android应用程序,当用户开始滚动新闻列表时,我想清除自定义的页眉和页脚栏。当用户停止滚动新闻时,这些栏也应该出现。这样我可以为用户提供更多的阅读新闻的空间。但问题是,我找不到一种方法来触发像onScrollStop或onScrollStart这样的事件。 请提供帮助。查看 本质上,您的Android 如何在ScrollView中设置onScrollStop事件,android,android-layout,Android,Android Layout,我正在开发一个新闻阅读器类型的android应用程序,当用户开始滚动新闻列表时,我想清除自定义的页眉和页脚栏。当用户停止滚动新闻时,这些栏也应该出现。这样我可以为用户提供更多的阅读新闻的空间。但问题是,我找不到一种方法来触发像onScrollStop或onScrollStart这样的事件。 请提供帮助。查看 本质上,您的活动应该实现ListView.OnScrollListener。然后您有回调: public void onScrollStateChanged(AbsListView view
活动
应该实现ListView.OnScrollListener
。然后您有回调:
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
break;
case OnScrollListener.SCROLL_STATE_FLING:
break;
}
}
别忘了在您的列表视图上调用setOnScrollListener(this)
查看
本质上,您的活动
应该实现ListView.OnScrollListener
。然后您有回调:
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
break;
case OnScrollListener.SCROLL_STATE_FLING:
break;
}
}
别忘了在您的
列表视图上调用setOnScrollListener(this)
在我的项目中,我必须截取滚动的结尾,因此我实现了自己的滚动Listener
:
public class VerticalScrollLayout extends ScrollView {
private GestureDetector gdScrolling;
private boolean isScrolling;
private OnScrollListener lOnScroll;
public VerticalScrollLayout(Context context) {
super(context);
setVerticalScrollBarEnabled(false);
gdScrolling = new GestureDetector(new SimpleOnGestureListener() {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
isScrolling = true;
return false;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
});
setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gdScrolling.onTouchEvent(event)) {
return false;
}
if(event.getAction() == MotionEvent.ACTION_UP) {
if(isScrolling ) {
isScrolling = false;
if(lOnScroll != null) {
lOnScroll.onScrollEnded();
}
}
}
return false;
}
});
}
public void setOnScrollListener(OnScrollListener l) {
lOnScroll = l;
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if(lOnScroll != null) {
lOnScroll.onScrollChanged(x, y, oldx, oldy);
}
}
public interface OnScrollListener {
void onScrollChanged(int x, int y, int oldx, int oldy);
void onScrollEnded();
}
}
这可能不是最佳做法,但效果很好 在我的项目中,我必须截取滚动的结尾,因此我实现了自己的
ScrollListener
:
public class VerticalScrollLayout extends ScrollView {
private GestureDetector gdScrolling;
private boolean isScrolling;
private OnScrollListener lOnScroll;
public VerticalScrollLayout(Context context) {
super(context);
setVerticalScrollBarEnabled(false);
gdScrolling = new GestureDetector(new SimpleOnGestureListener() {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
isScrolling = true;
return false;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
});
setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gdScrolling.onTouchEvent(event)) {
return false;
}
if(event.getAction() == MotionEvent.ACTION_UP) {
if(isScrolling ) {
isScrolling = false;
if(lOnScroll != null) {
lOnScroll.onScrollEnded();
}
}
}
return false;
}
});
}
public void setOnScrollListener(OnScrollListener l) {
lOnScroll = l;
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if(lOnScroll != null) {
lOnScroll.onScrollChanged(x, y, oldx, oldy);
}
}
public interface OnScrollListener {
void onScrollChanged(int x, int y, int oldx, int oldy);
void onScrollEnded();
}
}
这可能不是最佳做法,但效果很好 谢谢Paul,但是这些解决方案适用于ListView,我不知道如何在ScrollView中实现它们。有什么帮助吗?哦,哇,很抱歉(我不知怎么忽略了标题!)。这个答案被标记为有效:谢谢Paul,但是这些解决方案适用于ListView,我不知道如何在ScrollView中实现它们。有什么帮助吗?哦,哇,很抱歉(我不知怎么忽略了标题!)。这个答案被标记为有效:顺便说一句,如果有更好的方法来实现这一点,我也会感兴趣。这个选项有效,但我认为必须有一个更简单的方法来实现。希望有人愿意与我们分享。1.感谢您的努力。:)顺便说一句,如果有更好的方法来实现这一点,我也会感兴趣。这个选项是可行的,但我认为必须有一个更简单的方法来实现。希望有人愿意与我们分享。1.感谢您的努力。:)