Skip to content
/ rvtools Public

Gestures and other stuff for Android RecyclerView

Notifications You must be signed in to change notification settings

dubiao/rvtools

Repository files navigation

RvTools

Define swipe gestures, move list items and change their appearance.

alt tag

Add lib to your project

compile 'com.olmur.rvtools:rvtools:0.0.2'

Extend BaseRecyclerAdapter class

public class MainAdapter extends BaseRecyclerAdapter<MainEntity, MainAdapter.ViewHolder> {
  ...
}

Create ViewHolder that extends BaseViewHolder

public class ViewHolder extends BaseRecyclerAdapter.BaseViewHolder<MainEntity> {
        private TextView mTitleTv;

        ViewHolder(@NonNull View view) {
            super(view);
            mTitleTv = (TextView) view.findViewById(R.id.title_tv);
        }

        @Override
        public void bindView(MainEntity element) {
            mTitleTv.setText(element.getTitle());
        }
}

Create Gestures Listeners

public class MainActivity extends AppCompatActivity implements IOnSwipeLeftAction, IOnSwipeRightAction, IOnMoveAction {
   @Override
    public void onMove(int fromPosition, int toPosition) {
        mAdapter.move(fromPosition, toPosition);
    }

    @Override
    public void onSwipeLeftAction(int position) {
        mAdapter.deletItem(position);
    }

    @Override
    public void onSwipeRightAction(int position) {
        mAdapter.changeItem(position);
    }
}

Create Swipe Context Menu Drawer

public class SwipeMenuDrawer extends SwipeContextMenuDrawer {

    private final Paint mLeftPaint;
    private final Paint mRightPaint;

    public SwipeMenuDrawer() {
        mLeftPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mRightPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mLeftPaint.setColor(Color.GREEN);
        mRightPaint.setColor(Color.RED);
    }

    @Override
    public void drawRight(@NonNull Canvas canvas, @NonNull View view) {
        canvas.drawRect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom(), mLeftPaint);
    }

    @Override
    public void drawLeft(@NonNull Canvas canvas, @NonNull View view) {
        canvas.drawRect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom(), mRightPaint);
    }
}

To add different behaviour on item select/release implement IViewHolderSelector interface in ViewHolder

 public class ViewHolder extends BaseRecyclerAdapter.BaseViewHolder<MainEntity> implements IViewHolderSelector {
         ... 
        @Override
        public void onSelected() {
            itemView.setBackgroundColor(Color.GRAY);
            mTitleTv.setTextColor(Color.WHITE);
        }

        @Override
        public void onReleased() {
            itemView.setBackgroundColor(Color.WHITE);
            mTitleTv.setTextColor(Color.GRAY);
        }
 }

Create EmptyRecyclerView and provide it with empty view

EmptyRecyclerView recyclerView = (EmptyRecyclerView) findViewById(R.id.empty_recycler_view);
recyclerView.setEmptyView(emptyView);

Create RvTools for your RecyclerView

  new RvTools.Builder(recyclerView)
                 .withSwipeRightAction(this)
                 .withSwipeLeftAction(this)
                 .withMoveAction(this, mAdapter, ItemTouchHelper.DOWN | ItemTouchHelper.UP)
                 .withSwipeContextMenuDrawer(new SwipeMenuDrawer())
                 .buildAndApplyToRecyclerView();

That's it :)

About

Gestures and other stuff for Android RecyclerView

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages