Android之自定义View:侧滑删除

栏目: IOS · Android · 发布时间: 6年前

内容简介:Android之自定义View:侧滑删除

作者博客

http://www.cherylgood.cn

源码地址

https://github.com/anzaizai/EasySwipeMenuLayout

前言

Android之自定义View:侧滑删除

本篇要讲的是自定义view:侧滑删除,其实为了今天的控件需要了解一下自定义view的知识,有View的测量、布局、Android的touch事件的传递、Scroller三个知识点,之前公众号也发过相关知识的文章。接下来就让我们来看看如何用这几个知识点组成我们的侧滑菜单吧。

  1. Scorller的使用详解

  2. Android Touch事件分发机制详解

  3. Android之View的诞生之谜

  4. Android之自定义View之Measure

  5. Android之自定义View之Layout

  6. Android之自定义View之Draw

构想图

Android之自定义View:侧滑删除

我们这次要实现的控件叫做EasySwipeMenuLayout,内部主要分为三部分:

  1. 内容区域

  2. 左边菜单按钮区域

  3. 右边菜单按钮区域

当我们向右滑时,通过scroller将左边按钮区域滚动出来

当我们向左滑时,通过scroller将右边按钮区域滚动出来

实现的思路滤清了,那么我们就开始动手吧

具体实现

首先,网上类似的轮子有很多,但为什么我们还要自己写一下呢,当然是为了学习,所谓知其然而知其所以然也,轮子只是满足了大部分人的需求,试想某一天,有些效果网上是找不到的,那么此时就只能靠自己了。

当然,你也可以说,我就是想自己写,哈哈。

在开始前,我还想再说一点,网上有很多类似的轮子,但是我发现个特点,他们要求控件内的子布局的顺序相对呆板,不够灵活,也就是所谓通过约定来实现。

but,我这次想通过配置来实现,那么如何配置呢,其实我们可以通过控件的id进行绑定,参考了google官方控件的部分思想。

布局文件配置效果

首先,我想实现的配置效果是这样子的

Android之自定义View:侧滑删除 Android之自定义View:侧滑删除

如下可以看到,就是通过id来绑定,让EasySwipeMenuLayout知道哪个childView是现实内容的,哪个是左边的菜单布局,哪个是右边的菜单布局。

Android之自定义View:侧滑删除

为什么要这样子设计的,我的想法是,这样子更灵活,我不用规定里面的子布局的顺序。

以上仅代表个人观点,当然,肯定有更好的设计方案。

Ok,既然要通过id来配置,那么就会用到自定义控件属性的知识,其实很简单,就是在res/values下创建一个attrs.xml文件,在里面以你喜欢的名字定义属性即可

Android之自定义View:侧滑删除

定义好了,我们要怎么获取呢,其实也很easy的了

Android之自定义View:侧滑删除

Android之自定义View:侧滑删除

Ok,自定义控件的自定义属性问题就这样解决了,接下来我们就开始分析实现代码吧

首先我们的EasySwipeMenuLayout通过继承ViewGroup进行实现,里面的构造方法通过不断的调用自身的构造方法,最终会调用init()方法做一些初始化方面的工作。

Android之自定义View:侧滑删除

我们想下初始化需要做什么工作呢?其实很简单

  1. 肯定是获取我们自定义的属性了,因为我们要根据用户配置的属性进行处理嘛

  2. 前面也说了,侧滑用到了scroller,我们的scroller对象的初始化也可以放在这里

  3. 一些辅助类的初始化

Android之自定义View:侧滑删除 Android之自定义View:侧滑删除

初始化之后,根据View的创建流程,下一步当然是测量了

Android之自定义View:侧滑删除 Android之自定义View:侧滑删除 Android之自定义View:侧滑删除

Ok,布局已经测量好了,我们只需要把它按设计摆上去即可

Android之自定义View:侧滑删除 Android之自定义View:侧滑删除

Ok,弄到这里,我们接下来还有什么没做呢

yes,当然是对于touch事件的交互了

这里采用重写dispatchTouchEvent事件进行实

现,当然你也可以重写onTouchEvent事件进行实现

Android之自定义View:侧滑删除 Android之自定义View:侧滑删除 Android之自定义View:侧滑删除 Android之自定义View:侧滑删除

Ok,之后我们再考虑点细节问题就差不多了

比如,假如你在recyclerView中使用,那么当你侧滑出菜单的时候,肯定不希望他出发recyclerView的滚动事件,这时我们可以通过重写onInterceptTouchEvent方法处理

Android之自定义View:侧滑删除

Ok,到这里我们就基本完工了。

总结

自定义View三部曲,测量、布局、绘制的掌握是关键

与用户交互,重写dispatchTouchEvent或者onTouchEvent等,根据实际情况而定

做好一定的touch事件拦截处理

重点还是要掌握自定义View的三部曲以及touch事件的分发机制,再加上一些动画的处理,基本能满足大部分的业务需求了,重点还是要掌握根本的东西,厚积而薄发,加油。

希望通过本次的内容分析能够给予你一些帮助,谢谢!

Android之自定义View:侧滑删除


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++数据结构与算法

C++数据结构与算法

[美]乔兹德克(Adam Drozdek) / 徐丹、吴伟敏 / 清华大学出版社 / 2014-10-1 / 63.00元

本书全面系统地介绍了数据结构,并以C++语言实现相关的算法。书中主要强调了数据结构和算法之间的联系,使用面向对象的方法介绍数据结构,其内容包括算法的复杂度分析、链表、栈、队列、递归、二叉树、图、排序和散列。书中还清晰地阐述了同类教材中较少提到的内存管理、数据压缩和字符串匹配等主题。书中包含大量的示例分析和图形,便于读者进一步理解和巩固所学的知识。一起来看看 《C++数据结构与算法》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器