【发布时间】:2017-01-28 05:57:57
【问题描述】:
只有当HorizontalScrollView 被用户滚动时,某些逻辑才需要在HorizontalScrollView 侦听器中执行,而不是我在其他代码部分调用horizontalScrollView.scrollBy(dx, 0); 方法。
带有标志 - 程序调用已开始,已完成 - 无法真正解决问题,因为在 scrollBy 方法调用和触发事件处理程序之间有一个小的延迟。但是在这个时间范围内,甚至用户都可以触摸和滚动HorizontalScrollView。
你会建议什么方法?
horizontalScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
if (horizontalState == 0) {
horizontalState = 2;
}
if (horizontalState == 2) {
int d = ...;
if (d != 0) {
userSettingRecycleView.scrollBy(d , 0);
} else {
horizontalState = 0;
}
}
}
});
userSettingRecycleView.addOnScrollListener(new RecyclerView.OnScrollListener(){
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy){
if (horizontalState == 1) {
super.onScrolled(recyclerView, dx, dy);
horizontalScrollView.scrollBy(dx, 0);
}
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
ItemUserSettingRatingActivity.horizontalState = 1;
}
if (newState == RecyclerView.SCROLL_STATE_IDLE || newState == RecyclerView.SCROLL_STATE_SETTLING) {
ItemUserSettingRatingActivity.horizontalState = 0;
}
}
});
【问题讨论】:
标签: android horizontal-scrolling horizontalscrollview