仿手机QQ消息数拖动删除效果

转载请注明出处,点击此处 查看更多精彩内容。

仿手机QQ消息数拖动删除效果,本效果的实现由这里的项目修改而来,原项目使用稍显麻烦,且只能使用在ListView及ScrollView中。

效果图

用法:

复制 DragDeleteTextView.java,和clean_anim.xml,以及使用到的图片 mipmap-xhdpi/* 到自己项目中的对应位置。

DragDeleteTextView 类的用法与 TextView 完全一致,获取 DragDeleteTextView 的实例之后,可以调用 setConnectedColor(int connectedColor) 方法设置拖动 View 与原位置的连接线的颜色,默认红色。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现 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左滑显示删除按钮的示例代码,可以根据实际需求进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值