> Java > java지도 시간 > Android RecyclerView 슬라이드를 삭제하고 드래그하여 정렬

Android RecyclerView 슬라이드를 삭제하고 드래그하여 정렬

高洛峰
풀어 주다: 2017-02-08 17:14:50
원래의
1854명이 탐색했습니다.

이 글은 안드로이드 RecyclerView 슬라이딩 삭제와 드래그 정렬 관련 정보를 주로 소개하고 있으니 필요하신 분들은 참고하시면 됩니다.

이 글은 위 세 글에 이어 RecyclerView에 대한 소개입니다. 몇 마디만 말하면, 아직 ListView를 사용하고 있다면 ListView를 포기할 수 있습니다. RecyclerView는 자동으로 항목 보기(ViewHolder)를 캐시하는 데 도움을 주고, 애니메이션과 다양한 작업의 구분선을 사용자 정의할 수 있게 하며, 항목에 대해 몇 가지 동작 작업을 수행할 수 있게 해줍니다. 또한 디자인 라이브러리의 출시로 머티리얼 스타일로 앱을 작성하는 것이 크게 쉬워졌기 때문에 ListView는 이 라이브러리와 호환되지 않습니다. 예를 들어 RecyclerView만 서로 슬라이딩을 조정할 수 있습니다.

먼저 이 기사의 렌더링을 살펴보세요.

Android RecyclerView滑动删除和拖动排序

효과 콘텐츠는 주로 세 부분으로 구성됩니다.
•긴 그 중 하나를 누르고 클릭하면 항목을 다른 위치로 끌 수 있습니다
• 항목을 삭제하려면 왼쪽이나 오른쪽으로 스와이프
• 항목을 길게 누르면 플로팅 작업이 수행되며 이후 다시 정렬됩니다. 내려놓으세요

①먼저 쉽다가 나중에 어려운 카드 플로팅 효과
머티리얼 디자인에서는 객체가 3D 모드로 표시되므로 Z축이 추가됩니다. 물체의 높이를 나타냅니다.

Android RecyclerView滑动删除和拖动排序

카드를 클릭할 때 사용자에게 카드를 조작하고 있음을 알 수 있도록 피드백, 즉 터치 피드백을 주어야 합니다. 터치 렌더링의 터치 피드백은 물 잔물결이 먼저 나타난 다음 카드를 이동할 수 있을 때 먼저 떠 있다가 움직이기 시작하고 마지막으로 떨어지는 것입니다. (플로팅 애니메이션을 시청해야 할 수도 있습니다. 신중하게)

Android RecyclerView滑动删除和拖动排序

구현:
물 파급 효과는 시스템에서 제공합니다. 데모에서는 콘텐츠를 표시하기 위해 CardView를 사용하기 때문입니다. CardView에 두 가지 속성을 추가하세요:
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground"
뜨고 가라앉는 애니메이션은 어렵지 않습니다. View의 TranslationZ 속성을 변경하세요. :

private void pickUpAnimation(View view) {
  ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationZ", 1f, 10f);
  animator.setInterpolator(new DecelerateInterpolator());
  animator.setDuration(300);
  animator.start();
}
로그인 후 복사

②Swipe and Move Item
Swipe는 왼쪽 및 오른쪽 슬라이드를 나타냅니다. 위의 삭제, 이동은 항목을 이동하고 목록 정렬을 변경하는 방법입니다. 이 두 가지 기능을 실현하려면 ItemTouchHelper 클래스를 사용해야 합니다. 이 클래스를 구성한 후, RecyclerView에서 특정 작업(슬라이딩 및 이동)이 발생하면 AttachToRecyclerView 메서드를 호출할 수 있습니다. 이 클래스를 구성할 때 해당 메서드를 콜백하고 이러한 메서드의 데이터 세트를 조작할 수 있습니다.
new ItemTouchHelper(new ItemTouchHelper.Callback() { //코드 생략
}).attachToRecyclerView(mRecyclerView)

다음 단계는 인터페이스 콜백 메서드를 다시 작성하는 것입니다. 다시 작성해야 할 몇 가지 작성된 항목이 있습니다. 즉:
•isItemViewSwipeEnable: 항목을 슬라이드할 수 있는지 여부
•isLongPressDragEnable: 항목을 길게 누를 수 있는지 여부
•getMovementFlags: 이동 플래그 가져오기
• onMove: 항목이 다른 콜백에 의해 이동될 때 항목이 교체될 때, 즉 데이터 세트의 내용 순서가 변경되는 경우
•onMoved: onMove가 true를 반환할 때의 콜백
•onSwiped: 항목이 있을 때의 콜백
•setSelectedChange: 특정 항목을 길게 눌러 선택하면 다시 호출됩니다. 길게 눌러 이동한 항목을 놓으면

<이라고도 합니다. 🎜>


new ItemTouchHelper(new ItemTouchHelper.Callback() {
  private RecyclerView.ViewHolder vh;

  @Override
  public boolean isItemViewSwipeEnabled() {
    return true;
  }

  @Override
  public boolean isLongPressDragEnabled() {
    return true;
  }

  @Override
  public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder
      viewHolder) {
    // 拖拽的标记,这里允许上下左右四个方向
    int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT |
        ItemTouchHelper.RIGHT;
    // 滑动的标记,这里允许左右滑动
    int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
    return makeMovementFlags(dragFlags, swipeFlags);
  }

  /*
    这个方法会在某个Item被拖动和移动的时候回调,这里我们用来播放动画,当viewHolder不为空时为选中状态
    否则为释放状态
   */
  @Override
  public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
    super.onSelectedChanged(viewHolder, actionState);
    if (viewHolder != null) {
      vh = viewHolder;
      pickUpAnimation(viewHolder.itemView);
    } else {
      if (vh != null) {
        putDownAnimation(vh.itemView);
      }
    }
  }


  @Override
  public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
             RecyclerView.ViewHolder target) {
    // 移动时更改列表中对应的位置并返回true
    Collections.swap(newsList, viewHolder.getAdapterPosition(), target
        .getAdapterPosition());
    return true;
  }

  /*
    当onMove返回true时调用
   */
  @Override
  public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, int
      fromPos, RecyclerView.ViewHolder target, int toPos, int x, int y) {
    super.onMoved(recyclerView, viewHolder, fromPos, target, toPos, x, y);
    // 移动完成后刷新列表
    mAdapter.notifyItemMoved(viewHolder.getAdapterPosition(), target
        .getAdapterPosition());
  }

  @Override
  public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
    // 将数据集中的数据移除
    newsList.remove(viewHolder.getAdapterPosition());
    // 刷新列表
    mAdapter.notifyItemRemoved(viewHolder.getAdapterPosition());
  }
}).attachToRecyclerView(mRecyclerView);
로그인 후 복사

코드는 댓글과 함께 여기에 직접 게시되어 있으므로 비교적 간단해야 합니다.

위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다.

Android RecyclerView 슬라이딩 삭제 및 드래그 정렬에 관한 더 많은 글은 PHP 중국어 홈페이지를 주목해주세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿