一、橫向滑動模式
我們都知道,RecyclerView是一種展示列表數據的視圖,而它有三種滑動模式:VERTICAL、HORIZONTAL和網格布局。它們中的橫向滑動模式就是指RecyclerView可以橫向滑動展示數據。
下面是橫向滑動的實現代碼示例:
LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); recyclerView.setLayoutManager(layoutManager);
通過上述代碼,我們可以將RecyclerView的滑動模式設置為橫向展示數據。
二、橫向滑動操作
在橫向滑動模式下,我們可以進行各種滑動操作,例如:刪除、添加、移動等等。下面我們分別來介紹一下這些滑動操作:
1.刪除操作
可以通過RecyclerView的Adapter及ItemTouchHelper實現刪除操作。刪除操作代碼示例:
//初始化時需要傳入自己的Adapter ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT) { @Override public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { return false; } @Override public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { adapter.removeItem(viewHolder.getAdapterPosition()); } }); itemTouchHelper.attachToRecyclerView(recyclerView);
上述代碼,我們通過設置ItemTouchHelper.SimpleCallback,將滑動方向設置為ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT,當用戶向左或右滑動Item時,會回調onSwiped方法,我們在onSwiped方法中刪除對應的Item。
2.添加操作
我們可以在橫向RecyclerView的尾部添加新的Item,如下代碼:
adapter.addItem(); adapter.notifyItemInserted(adapter.getItemCount());
上述代碼,我們通過Adapter的addItem()方法向數據源中添加新的Item,並通過notifyItemInserted()方法通知Adapter更新視圖列表,展示新的Item。
3.移動操作
為了支持移動操作,我們需要實現拖拽和長按拖拽的效果,如下代碼:
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback( ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT, ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { @Override public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { adapter.moveItem(viewHolder.getAdapterPosition(), target.getAdapterPosition()); return true; } @Override public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { } }); itemTouchHelper.attachToRecyclerView(recyclerView); ItemTouchHelper.Callback callback = new ItemTouchHelper.Callback() { @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; return makeMovementFlags(dragFlags, swipeFlags); } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { // do something return false; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { // do something } }; ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback); itemTouchHelper.attachToRecyclerView(recyclerView);
上述代碼,我們在ItemTouchHelper.SimpleCallback的onMove方法中,通過Adapter的moveItem()方法實現Item移動操作。而在ItemTouchHelper.Callback中,則是實現了拖拽移動的效果。拖拽移動的效果實現通過拖拽時的手勢和手指抬起後確認移動的位置實現。
三、橫向滑動實現效果
在RecyclerView橫向滑動實現中,我們還需要注意到一些展示效果問題。如:全屏展示、半屏展示、滑動列表展示等等。以下是一些常見效果實現的代碼示例:
1.全屏展示
RecyclerView橫向全屏展示可通過以下代碼實現:
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false) { @Override public boolean checkLayoutParams(RecyclerView.LayoutParams lp) { //設置全屏展示效果 lp.width = getWidth() / 3; lp.height = getHeight(); return true; } }; recyclerView.setLayoutManager(layoutManager);
上述代碼通過調用LinearLayoutManager.checkLayoutParams方法來設置全屏展示效果,其中lp.width指定單個Item的寬度,而lp.height指定單個Item的高度,通過控制lp.width的值,我們可以實現Item全屏或者半屏展示效果。
2.半屏展示
RecyclerView橫向半屏展示可通過以下代碼實現:
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false) { @Override public boolean checkLayoutParams(RecyclerView.LayoutParams lp) { //設置半屏展示效果 lp.width = getWidth() / 2; lp.height = getHeight(); return true; } }; recyclerView.setLayoutManager(layoutManager);
同樣地,通過控制lp.width的大小,我們可以實現Item的半屏展示效果。
3.滑動列表展示
滑動列表展示效果可通過RecyclerView的滾動實現。如下所示代碼:
recyclerView.smoothScrollToPosition(position)
上述代碼會將RecyclerView滾動到指定位置,並在滑動過程中實現動畫效果。我們可以通過控制position的值來實現滑動展示的效果。
原創文章,作者:GBKID,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/329929.html