直接上效果图

记录仿写滴答清单App 过程中的技术点

本文分为以下章节,读者可按需阅读:

1.自定义RecycleItemTouchHelper

2.实现滴答清单左滑右滑效果

3.RecycleView使用自定义RecycleItemTouchHelper

一、ItemTouchHelper使用

本章介绍下ItemTouchHelper的基本使用方法,主要是我们后面实现左滑右滑会用到的类和方法,拖拽方法暂时不详细描述。

1.自定义RecycleItemTouchHelper类继承 ItemTouchHelper.Callback

public class RecycleItemTouchHelper extends ItemTouchHelper.Callback {

private static final String TAG = "RecycleItemTouchHelper";

private Resources resources;

private int padding;//灰色背景的宽度padding

private int linePadding;//对勾的宽度

// int maxDrawWidth=2*padding+bitmap.getWidth();//最大的绘制宽度

//背景画笔

private Paint paint;

private Paint mPaintTick;

//记录打钩路径的三个点坐标

private float[] mPoints = new float[8];

private ItemTouchHelperCallback helperCallback;

public RecycleItemTouchHelper(ItemTouchHelperCallback helperCallback) {

this.helperCallback = helperCallback;

resources = TodoApplication.getInstance().getResources();

padding = UiUtil.dip2px(TodoApplication.getInstance(), 60);//图片绘制的padding

linePadding = UiUtil.dip2px(TodoApplication.getInstance(), 16);//图片绘制的padding

//背景画笔

paint = new Paint();

mPaintTick = new Paint();

//对勾画笔

mPaintTick.setColor(resources.getColor(R.color.white));

mPaintTick.setStrokeCap(Paint.Cap.ROUND);

mPaintTick.setStrokeWidth(UiUtil.dip2px(TodoApplication.getInstance(), 2.4f));

}

/**

* 设置滑动类型标记

*

* @param recyclerView

* @param viewHolder

* @return 返回一个整数类型的标识,用于判断Item那种移动行为是允许的

*/

@Override

public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {

//START 右向左 END左向右 LEFT 向左 RIGHT向右 UP向上

//如果某个值传0,表示不触发该操作,次数设置支持上下拖拽,支持向右滑动

return makeMovementFlags(0, LEFT | RIGHT);

}

/**

* Item是否支持长按拖动

*

* @return true 支持长按操作

* false 不支持长按操作

*/

@Override

public boolean isLongPressDragEnabled() {

return super.isLongPressDragEnabled();

}

/**

* Item是否支持滑动

*

* @return true 支持滑动操作

* false 不支持滑动操作

*/

@Override

public boolean isItemViewSwipeEnabled() {

return super.isItemViewSwipeEnabled();

}

@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) {

switch (direction) {

case LEFT:

//左滑

helperCallback.onItemL(viewHolder.getAdapterPosition());

break;

case RIGHT:

//右滑

helperCallback.onItemR(viewHolder.getAdapterPosition());

break;

}

}

@Override

public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {

super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);

}

/**

* Item被选中时候回调

*

* @param viewHolder

* @param actionState 当前Item的状态

* ItemTouchHelper.ACTION_STATE_IDLE 闲置状态

* ItemTouchHelper.ACTION_STATE_SWIPE 滑动中状态

* ItemTouchHelper#ACTION_STATE_DRAG 拖拽中状态

*/

@Override

public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {

super.onSelectedChanged(viewHolder, actionState);

}

//滑动接口回调

public interface ItemTouchHelperCallback {

void onItemR(int positon);

void onItemL(int positon);

}

}

复制代码2.实现滴答清单右滑效果

重写onChildDraw方法

@Override

public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {

//滑动时自己实现背景及图片

if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {

//dX大于0时向右滑动,小于0向左滑动

View itemView = viewHolder.itemView;//获取滑动的view

int x = Math.round(Math.abs(dX));

//1.向右滑动

if (dX > 0) {

if (x > padding) {

//滑动距离大于padding时开始变色

paint.setColor(resources.getColor(R.color.bg_completed));

} else {

//滑动距离小于padding时是灰色

paint.setColor(resources.getColor(R.color.todo));

}

//2.根据滑动实时绘制一个背景

c.drawRect(itemView.getLeft(), itemView.getTop(), x, itemView.getBottom(), paint);

//3.绘制对勾

//指定对勾绘制的位置,一个对勾需要三个点

//每一项的高

int h = itemView.getBottom() - itemView.getTop();

mPoints[0] = x - ((padding / 2) + (linePadding / 2));

mPoints[1] = itemView.getTop() + h / 2;

mPoints[2] = x - padding / 2;

mPoints[3] = itemView.getTop() + (h / 2 + linePadding / 2);

mPoints[4] = x - padding / 2;

mPoints[5] = itemView.getTop() + (h / 2 + linePadding / 2);

mPoints[6] = (float) (x - linePadding);

mPoints[7] = itemView.getTop() + (h / 2 - linePadding /2);

c.drawLines(mPoints, mPaintTick);

//绘制时需调用平移动画,否则滑动看不到反馈

itemView.setTranslationX(dX);

} else {

//左滑效果和右滑一样,暂未实现。

paint.setColor(resources.getColor(R.color.bg_todo));

c.drawRect(itemView.getRight(), itemView.getTop(), itemView.getWidth() - x, itemView.getBottom(), paint);

//绘制时需调用平移动画,否则滑动看不到反馈

itemView.setTranslationX(dX);

}

} else {

super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);

}

}

复制代码3.RecycleView使用自定义RecycleItemTouchHelper

ItemTouchHelper.Callback callback = new RecycleItemTouchHelper(todoAdapter);

ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);

itemTouchHelper.attachToRecyclerView(recyclerview);

复制代码

未完待续

android 左滑右滑,Android仿滴答清单左滑右滑效果相关推荐

  1. android日程表实现---仿滴答清单

    此项目是仿滴答清单做的一个日程表,现包括的功能有:日视图.三日视图.周视图.月视图.列表视图(周月可自由切换,左右滑动切换周或月份). 1. 网络请求功能完善: 2. 同步手机的日程表: 3. 可以增 ...

  2. java 计划日视图,GitHub - sddysz/calendarSchedule: 日程表,仿滴答清单,包含日视图、三日视图、周视图、月视图、列表视图、同步手机系统日程、添加日程...

    calendarSchedule 日程表,仿滴答清单,包含日视图.三日视图.周视图.月视图.列表视图 此项目是仿滴答清单做的一个日程表,现包括的功能有:日视图.三日视图.周视图.月视图.列表视图(周月 ...

  3. android+待办事项+日历,TickTick Pro「滴答清单」v5.9.4.4 for Android 直装解锁高级版 —— 一个强大的待办事项和任务管理应用...

    TickTick Pro「滴答清单」是一个强大的待办事项和任务管理应用,它可以在您的所有设备上进行无缝云端同步.无论是计划行程.做备忘录.与家庭成员分享购物清单还是与您的同事协作,TickTick 都 ...

  4. 仿小米、华为、滴答清单、365、钉钉自定义日历

    原文简书地址(http://www.jianshu.com/p/7a3f0a37e0ef) 简介 由于项目的需求,研究了众多日历软件.本软件是一款高仿小米.华为.滴答清单.365.钉钉等的自定义日历控 ...

  5. 【软件使用】滴答清单的使用

    一.将所有的事情都从大脑里挪出来放到滴答清单里 实用功能: 1.将微信的聊天记录直接保存到收集箱中 功能实现: 长按微信聊天记录 -->选择信封 -->发送到滴答清单 2.审查某个东西(如 ...

  6. 滴答清单 - Todo 任务提醒(Record things and remind)

    插件介绍: 对于有强迫症和健忘症的小编来说,经常会忘记一些重要的或琐碎而又必须做的事情,相信有很多朋友也有一样的烦恼,如果用笔记本记录的话又相对麻烦一些,于是一些记录相关的软件就运应而生,这就为大家推 ...

  7. 基于滴答清单 Web 开发的 PC 客户端

    基于滴答清单 Web 开发的 PC 客户端 关于「滴答清单」 滴答清单是一款不可多得的 GTD 效率工具,它有着清晰明了的界面设计.恰到好处的功能设置.稳定的同步服务,如果你还缺少一款简洁而有效的 G ...

  8. 新版滴答清单 for Mac(任务规划软件)支持m1

    滴答清单 for Mac主要功能 全能提醒:强大的提醒功能,不再忘记到期时间,告别拖延症. 日历视图:直观查看日程安排,拖拽任务修改日期. 清晰分类:支持文件夹.标签.优先级分类,让任务变得清晰有层次 ...

  9. mac上好用的任务规划软件:滴答清单

    滴答清单 for Mac专为 macOS 设计的滴答清单,是你高效办公.团队协作.便捷生活的得力助手.提供多样化任务管理结构,助你合理规划.分清主次,重要的事情一目了然,每一个目标都触手可及:帮助用户 ...

最新文章

  1. 李宏毅机器学习自己的笔记(一)----------Introduction of MachineLearning
  2. .net core 基于 IHostedService 实现定时任务
  3. 当执行游戏0xc000007b错误的解决方法
  4. 47多项式02——整除
  5. My Calendar I
  6. Safari插件机制研究(二) 插件的视图管理
  7. Revel模板引擎Template基本语法
  8. python小游戏贪吃蛇下载_python实现贪吃蛇小游戏
  9. 哈工大计算机网络Mooc 第九章笔记(网络层(下))
  10. opencv实战从0到N (14)- 凸包算法 convexity defects
  11. 教你快速使用AD7606的简单驱动方法--并行
  12. pdf文件如何在安卓手机端不用下载在线预览
  13. 我的校招——南京烽火笔试+格力初面
  14. “msg“: “查询失败Text ‘2021-02-25T23:59:59‘ could not be parsed at index 10“
  15. java获取下月末,java获取每月月末日期
  16. css里那些惊艳程序员的背景色
  17. (附源码)计算机毕业设计SSM影院售票系统
  18. 如何用项目管理软件管理项目进度
  19. js验证码输入数字自动跳格
  20. AI与游戏的溯源与发展【1956年至今】 | AI掌故

热门文章

  1. 计算机组成原理知识框架梳理
  2. arduino——I2C通讯
  3. 南昌市工商联党组书记熊冬燕莅临红谷滩区·高通中国·影创联合创新中心调研
  4. 关于IT8951 Tinydrm Driver开源项目学习的心得
  5. Planet(鸽群卫星)遥感数据(3m)介绍及下载
  6. 图像分类中的对抗鲁棒性
  7. jetty文件服务器,Jetty 服务器
  8. php paypal订单号查询,PHP_php购物网站支付paypal使用方法,详细参考: https://cms.paypal.com/ - phpStudy...
  9. 图——邻接表的存储及基本操作
  10. 【AI名利场·公司】MagicMed脉极客:三年打磨出首款心电监测设备,AI将成新未来...