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;
}
}
});