2017-11-17 14 views
-1

私は上からアニメーションされたオーバーレイビューを持っています。そのシーンでは、私は要素リストを持つリサイクルビューを持っています。RecyclerViewドラッグして消すまでスクロール

ユーザーがリストを最後までスクロールすると、さらにスクロールするとrecyclerview全体がスクロールされ(下のビューが表示されません)、ACTION_UPはリサイクラーを画面から動かす必要があります。

上書きonTouchイベントは動作しません:

  1. RecyclerView.setOnTouch() -
  2. ParentView.setOnTouchを(グリッチドラッグ原因を) - 他のビュー(自己それをRecyclerViewない)をドラッグしたときにのみ動作します。

それはそれを行う方法の反応(2017年11月17日)を暴く新しいのThe Tinderスクロールのよう

任意のアイデアですか?あなたは全体のrecyclerViewを翻訳することができonScrolled方法で

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
      super.onScrollStateChanged(recyclerView, newState); 
     } 

     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 
     } 
    }); 

答えて

0

OK、自分で解決しました。私がグリッチについて話したときに、onTouch私は間違いをした。私は私のRecyclerViewに翻訳を設定し、私は原因もgetX()

によって返された座標一貫性のないタッチにこの野生の不具合の原因となった代わりにMotionEvent.getRawX()MotionEvent.getX()を使用

recyclerView.canScrollVertically(1);

Sarthak Gandhiが助けました。この時点currentDy.invoke(dy)

override fun onTouch(p0: View?, p1: MotionEvent): Boolean { 
    if (p1.action == MotionEvent.ACTION_UP && dragging) { 
     dragging = false 
     mInitailPoint = null 
     currentDy.invoke(0F) 
     return true 
    } 

    if (p1.action == MotionEvent.ACTION_DOWN || p1.action == MotionEvent.ACTION_MOVE) { 
     if (!dragging && !recyclerView.canScrollVertically(1)) { 
      mInitailPoint = Point(p1.rawX.toInt(), p1.rawY.toInt()) 
      mCurrentPoint = Point(p1.rawX.toInt(), p1.rawY.toInt()) 
      dragging = true 
      return true 
     } else if (dragging && p1.action == MotionEvent.ACTION_MOVE) { 
      mCurrentPoint = Point(p1.rawX.toInt(), p1.rawY.toInt()) 

      val dy = mCurrentPoint!!.y.toFloat() - mInitailPoint!!.y.toFloat() 
      if (dy < 0) { 
       currentDy.invoke(dy) 
      } else { 
       currentDy.invoke(0F) 
       dragging = false 
       return false 
      } 
      return true 
     } 
    } 
    return false 
} 

実際のコースのRecyclerViewに翻訳を設定し、これは火口のものを達成するための完全なコードではなく、何の情事アニメーションはありませんが、この部分はおよそ何質問です。物語の

教訓:あなたが翻訳したいビューのOnTouchListenerを設定している場合 - 翻訳

1

はこれを試してみてください。あなたはその後、これはブール値を返します

recyclerView.canScrollVertically(1); 

onScrolled方法で、この方法を使用するエンドに達しているかどうかをチェックするために

。次に、ビューを確認して移動できます。 これが役立つことを願っています。

+0

一つの問題を計算するために、生の座標を使用し、onScrollは、リストの最後に到達した後に呼び出されません。だから私はどのくらい私はビューを移動する必要があるか分からない。 – Alpha

関連する問題