Einige Logik muss in einem HorizontalScrollView
Listener nur ausgeführt werden, wenn HorizontalScrollView
wurde durch den Benutzer gescrollt, und nicht ich war, wer horizontalScrollView.scrollBy(dx, 0);
Methode an anderen Code-Teil aufgerufen.Entscheiden Sie ob scroll vom Benutzer initiiert oder programmgesteuert ausgelöst wurde?
Mit Flag - Programmatic Call wurde gestartet, fertig - kann das Problem nicht wirklich beheben, weil es eine kleine Verzögerung zwischen scrollBy
Methodenaufruf und auslösenden Ereignishandler gibt. Aber in diesem Zeitraum konnte sogar der Benutzer HorizontalScrollView
berühren und scrollen.
Welchen Ansatz würden Sie vorschlagen?
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;
}
}
});