2016-09-20 8 views
2

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

答えて

0

私はあなたのプログラムの開発scroolイベントとの間の範囲でユーザーのタッチを無効にすることをお勧め。つまり、カスタムHorisontalScrollViewを作成し、タップのキャッチをプログラマブルに有効/無効にするには、thoseクラスを使用します。

0

使用SCROLL_STATE_DRAGGING

private val scrollListener = object : RecyclerView.OnScrollListener() { 
    override fun onScrollStateChanged(recyclerView: RecyclerView?, newState: Int) { 
     super.onScrollStateChanged(recyclerView, newState) 
     if (newState == SCROLL_STATE_DRAGGING) ViewHelpers.hideKeyboard(activity) 
    } 
} 
関連する問題