2017-11-17 6 views
-1

위로부터 애니메이션 된 오버레이보기가 있습니다. 그 장면에서 나는 엘리먼트 목록을 가진 리사이클 뷰를 가지고있다.RecyclerView 끌어서 놓기 스크롤

사용자가 목록을 끝까지 스크롤하면 스크롤 막대를 사용하여 전체 recyclerview를 위로 스크롤해야하며 (아래보기가 보이지 않음) ACTION_UP은 리사이클 러를 화면 밖으로 움직여야합니다.

최우선 onTouch 이벤트가 작동하지 않습니다

  1. RecyclerView.setOnTouch를() -
  2. ParentView.setOnTouch을() 글리치 끌어 원인 - 다른 뷰를 드래그하는 경우에만 작동합니다 (그것을 자신을 RecyclerView하지 않음).

그것은 반응 (2017년 11월 17일)

모든 아이디어를 어떻게 그것을 수행하는 방법을 알게되어 새로운 부싯깃 스크롤처럼?

답변

0

좋아, 그것을 해결했다. 글리치 발생에 대해 이야기했을 때 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.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); 
     } 
    }); 

을 onScrolled 방법은 전체 recyclerView를 번역 할 수 있습니다. 당신이 끝이 다음 부울을 반환합니다 onScrolled 방법

recyclerView.canScrollVertically(1); 

이이 방법을 사용 도달 한 경우

확인합니다. 그런 다음보기를 확인하고 이동할 수 있습니다. 희망이 도움이됩니다.

+0

한 문제를 계산하는 원시 좌표를 사용하여 onScroll이 목록의 마지막에 도달 한 후 호출됩니다하지 않습니다. 그래서 내가 얼마나 많은 시각을 옮겨야하는지 모르겠다. – Alpha