Android 仿QQ左滑显示删除按钮
时间: 2023-08-14 08:06:03 浏览: 215
实现 Android 仿QQ左滑显示删除按钮的方法是使用 RecyclerView 的 ItemTouchHelper 类,它提供了拖动和滑动 Item 的处理逻辑。具体实现步骤如下:
1. 在 RecyclerView 的 adapter 中,实现 ItemTouchHelper.Callback 接口,该接口中有三个方法:onMove()、onSwiped() 和 getMovementFlags()。
2. 在 getMovementFlags() 方法中,设置支持的滑动方向为左滑。
3. 在 onSwiped() 方法中,处理滑动事件,比如删除 Item。
4. 在 Item 的 ViewHolder 中,添加一个删除按钮,并设置其可见性为不可见。
5. 在 ItemTouchHelper.Callback 的 onChildDraw() 方法中,处理左滑时的视觉效果,比如将删除按钮设置为可见,实现左滑删除的效果。
6. 在 RecyclerView 的 ItemDecoration 中,设置左滑时的背景颜色和阴影效果,使左滑效果更加美观。
代码示例:
```java
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements ItemTouchHelper.Callback {
private List<String> mData;
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
int swipeFlags = ItemTouchHelper.LEFT;
return makeMovementFlags(0, swipeFlags);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
// 拖动事件
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
// 左滑事件
int position = viewHolder.getAdapterPosition();
mData.remove(position);
notifyItemRemoved(position);
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
// 滑动时的视觉效果
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
View itemView = viewHolder.itemView;
int buttonWidth = itemView.getHeight();
Paint paint = new Paint();
paint.setColor(Color.parseColor("#D32F2F"));
RectF background = new RectF(itemView.getRight() + dX, itemView.getTop(), itemView.getRight(), itemView.getBottom());
c.drawRect(background, paint);
Drawable icon = ContextCompat.getDrawable(mContext, R.drawable.delete_icon);
int intrinsicWidth = icon.getIntrinsicWidth();
int intrinsicHeight = icon.getIntrinsicHeight();
int iconTop = itemView.getTop() + (itemView.getHeight() - intrinsicHeight) / 2;
int iconMargin = (itemView.getHeight() - intrinsicHeight) / 2;
int iconLeft = itemView.getRight() - iconMargin - intrinsicWidth;
int iconRight = itemView.getRight() - iconMargin;
int iconBottom = iconTop + intrinsicHeight;
icon.setBounds(iconLeft, iconTop, iconRight, iconBottom);
icon.draw(c);
}
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
static class ViewHolder extends RecyclerView.ViewHolder {
Button mDeleteButton;
public ViewHolder(View itemView) {
super(itemView);
mDeleteButton = itemView.findViewById(R.id.delete_button);
mDeleteButton.setVisibility(View.GONE);
}
}
}
```
以上是一个简单的实现 Android 仿QQ左滑显示删除按钮的示例代码,可以根据实际需求进行修改和扩展。
阅读全文