recyclerview在Android中应用的也很多了。废话不说多,先上图:
1.向右侧滑

2.向左侧滑

下面开始讨论一下关于这样的效果实怎么实现的:
1.首先创建一个侧滑的接口:

public interface ItemTouchHelperAdapter {/** * Called when an item has been dragged far enough to trigger a move. This is called every time * an item is shifted, and not at the end of a "drop" event.
*
* Implementations should call {@link RecyclerView.Adapter#notifyItemMoved(int, int)} after * adjusting the underlying data to reflect this move. * * @param fromPosition The start position of the moved item. * @param toPosition Then resolved position of the moved item. * @return True if the item was moved to the new adapter position. * * @see RecyclerView#getAdapterPositionFor(RecyclerView.ViewHolder) * @see RecyclerView.ViewHolder#getAdapterPosition() */boolean onItemMove(int fromPosition, int toPosition);/** * Called when an item has been dismissed by a swipe.
*
* Implementations should call {@link RecyclerView.Adapter#notifyItemRemoved(int)} after * adjusting the underlying data to reflect this removal. * * @param position The position of the item dismissed. * * @see RecyclerView#getAdapterPositionFor(RecyclerView.ViewHolder) * @see RecyclerView.ViewHolder#getAdapterPosition() */void onItemDismiss(int position);

}

2.主要的实现类:

public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback {public static final float ALPHA_FULL = 1.0f;private final ItemTouchHelperAdapter mAdapter;private int socllType = 0;public SimpleItemTouchHelperCallback(ItemTouchHelperAdapter adapter, int scollType) {    mAdapter = adapter;    this.socllType = scollType;}@Overridepublic boolean isLongPressDragEnabled() {    return true;}@Overridepublic boolean isItemViewSwipeEnabled() {    return true;}@Overridepublic int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {    // Set movement flags based on the layout manager    if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {        final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;        final int swipeFlags = 0;        return makeMovementFlags(dragFlags, swipeFlags);    } else {        final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;        final int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;        if (socllType == 0) {            return makeMovementFlags(dragFlags, swipeFlags);        } else if (socllType == 1) {            return makeMovementFlags(0, swipeFlags);        } else if (socllType == 2) {            return makeMovementFlags(dragFlags, 0);        } else {            return makeMovementFlags(0, 0);        }    }}@Overridepublic boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source, RecyclerView.ViewHolder target) {    if (source.getItemViewType() != target.getItemViewType()) {        return false;    }    // Notify the adapter of the move    mAdapter.onItemMove(source.getAdapterPosition(), target.getAdapterPosition());    return true;}@Overridepublic void onSwiped(RecyclerView.ViewHolder viewHolder, int i) {    // Notify the adapter of the dismissal    mAdapter.onItemDismiss(viewHolder.getAdapterPosition());}@Overridepublic void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {    if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {        // Fade out the view as it is swiped out of the parent's bounds        final float alpha = ALPHA_FULL - Math.abs(dX) / (float) viewHolder.itemView.getWidth();        viewHolder.itemView.setAlpha(alpha);        viewHolder.itemView.setTranslationX(dX);    } else {        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);    }}@Overridepublic void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {    // We only want the active item to change    if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {        if (viewHolder instanceof ItemTouchHelperViewHolder) {            // Let the view holder know that this item is being moved or dragged            ItemTouchHelperViewHolder itemViewHolder = (ItemTouchHelperViewHolder) viewHolder;            itemViewHolder.onItemSelected();        }    }    super.onSelectedChanged(viewHolder, actionState);}@Overridepublic void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {    super.clearView(recyclerView, viewHolder);    viewHolder.itemView.setAlpha(ALPHA_FULL);    if (viewHolder instanceof ItemTouchHelperViewHolder) {        // Tell the view holder it's time to restore the idle state        ItemTouchHelperViewHolder itemViewHolder = (ItemTouchHelperViewHolder) viewHolder;        itemViewHolder.onItemClear();    }}

}

3.callback中的另外的一个接口:

public interface ItemTouchHelperViewHolder {/** * Called when the {@link ItemTouchHelper} first registers an item as being moved or swiped. * Implementations should update the item view to indicate it's active state. */     void onItemSelected();/** * Called when the {@link ItemTouchHelper} has completed the move or swipe, and the active item * state should be cleared. */      void onItemClear();}

4.使用,实现这个接口

public class SingleNumOutAdapter extends BaseRecycleAdapter implements ItemTouchHelperAdapter {  //定义这个接口 private OnSingleNumOutLinsenter onSingleNumOutLinsenter; public void setOnSingleNumOutLinsenter(OnSingleNumOutLinsenter onSingleNumOutLinsenter) {    this.onSingleNumOutLinsenter = onSingleNumOutLinsenter; } //自己写个接口 public interface OnSingleNumOutLinsenter {    void onRemove(int position); } @Overridepublic boolean onItemMove(int fromPosition, int toPosition) {    return false;}@Overridepublic void onItemDismiss(int position) {    if (onSingleNumOutLinsenter != null) {        onSingleNumOutLinsenter.onRemove(position);    }  }}

5.Activity的使用,在onCreate()中

    ItemTouchHelper.Callback helperCallback = new SimpleItemTouchHelperCallback(adapter, 1);    ItemTouchHelper mItemTouchHelper = new ItemTouchHelper(helperCallback);    mItemTouchHelper.attachToRecyclerView(rvSingleOrder);    recyclerView.setAdapter(adapter);    adapter.setOnSingleNumOutLinsenter(new SingleNumOutAdapter.OnSingleNumOutLinsenter() {        @Override        public void onRemove(int position) {        }    });

——————————— 骚气的分割线——————————————————————————————————
这样就实现了这个侧滑的效果了,打完收工,嘿嘿

更多相关文章

  1. 小心XmlPullParser.netText()方法
  2. 除去ScrollView拉到尽头时再拉的阴影效果
  3. 【Android】解析Paint类中MaskFilter的使用
  4. 实现录音,播放,以及Socket的上传和下载。。【处女作】
  5. android定时任务实现
  6. android 实现按钮旋转720°
  7. Android(安卓)– 自定义Loading圆点
  8. Android(安卓)Activity间的过渡动画
  9. 浅谈Java中Collections.sort对List排序的两种方法

随机推荐

  1. Android高亮引导控件的实现代码
  2. 我的android 第28天 - Activity(一)
  3. Android Permission中英文对照表
  4. Android POST data and COOKIES
  5. NDK与JNI
  6. Android 颜色对照表
  7. 他山之石,可以攻玉
  8. Android 根据屏幕大小设置字体
  9. Android下内核配置make menuconfig出现一
  10. Android getWindow().setFlags方法 设置