Android源码解析--SwipeMenuListView仿QQ聊天左滑

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/50612714

绪论:

好久没写博客了,最近比较懒,不想写博客,但是在看书,看一些Android进阶的书,这里小编也给大家推荐几本适合进阶的书,相信会对你有所帮助的。
1.《Android群英传》 —徐宜生
2.《Android开发艺术探索》 —任玉刚
3.《Android源码设计模式》 —何红辉,郭爱民
以上几本是针对Android开发所用的,如果上面三本你都吃透了的话,相信你就可以在Android的世界里尽情的翱翔了。
下面的几本是一些在你编程之路上必不可少的几本经典的书:
1.《代码整洁之道》
2.《重构改善有代码的设计》
3.《MacTalk跨越边界》

好了,下面进入正题吧,今天小编给大家分享的是:仿QQ聊天实现左滑效果,先看一下效果吧:
这里写图片描述

实现:

1.定义滑动选项视图
通过监听滑动手势弹出滑动选项卡(前提是先创建好选项卡)
这里只贴出核心代码:

public boolean onSwipe(MotionEvent event) {mGestureDetector.onTouchEvent(event);switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mDownX = (int) event.getX();isFling = false;break;case MotionEvent.ACTION_MOVE:int dis = (int) (mDownX - event.getX());if (state == STATE_OPEN) {dis += mMenuView.getWidth();}swipe(dis);break;case MotionEvent.ACTION_UP:if (isFling || (mDownX - event.getX()) > (mMenuView.getWidth() / 2)) {// 打开选项卡smoothOpenMenu();} else {// 关闭选项卡smoothCloseMenu();return false;}break;}return true;}

2.创建选项卡:

public void createMenu(SwipeMenu menu) {// Test CodeSwipeMenuItem item = new SwipeMenuItem(mContext);item.setTitle("Item 1");item.setBackground(new ColorDrawable(Color.GRAY));item.setWidth(300);menu.addMenuItem(item);item = new SwipeMenuItem(mContext);item.setTitle("Item 2");item.setBackground(new ColorDrawable(Color.RED));item.setWidth(300);menu.addMenuItem(item);}

3.将选项卡添加到布局中:

private void addItem(SwipeMenuItem item, int id) {LayoutParams params = new LayoutParams(item.getWidth(),LayoutParams.MATCH_PARENT);LinearLayout parent = new LinearLayout(getContext());parent.setId(id);parent.setGravity(Gravity.CENTER);parent.setOrientation(LinearLayout.VERTICAL);parent.setLayoutParams(params);parent.setBackgroundDrawable(item.getBackground());parent.setOnClickListener(this);addView(parent);if (item.getIcon() != null) {parent.addView(createIcon(item));}if (!TextUtils.isEmpty(item.getTitle())) {parent.addView(createTitle(item));}}

4.Activity中调用:

ISwipeMenuCreator creator = new ISwipeMenuCreator() {@Overridepublic void create(SwipeMenu menu) {// 创建滑动选项SwipeMenuItem showItem = new SwipeMenuItem(getApplicationContext());// 设置选项背景showItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9,0xCE)));// 设置选项宽度showItem.setWidth(HankkinUtil.dp2px(90,MainActivity.this));// 设置选项标题showItem.setTitle("Show");// 设置选项标题showItem.setTitleSize(18);// 设置选项标题颜色showItem.setTitleColor(Color.WHITE);// 添加选项menu.addMenuItem(showItem);// 创建删除选项SwipeMenuItem deleteItem = new SwipeMenuItem(getApplicationContext());deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,0x3F, 0x25)));deleteItem.setWidth(HankkinUtil.dp2px(90, MainActivity.this));deleteItem.setIcon(R.drawable.ic_delete);menu.addMenuItem(deleteItem);}};menuListView.setMenuCreator(creator);

5.选项卡点击事件:

menuListView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {@Overridepublic void onMenuItemClick(int position, SwipeMenu menu, int index) {switch (index) {case 0: //第一个选项HankkinUtil.showToast(MainActivity.this, data.get(position).getTitle());break;case 1: //第二个选项data.remove(position);adapter.notifyDataSetChanged();break;}}});

代码中的下拉刷新上拉加载,小编是用的SwipeRefreshLayout
源码小编已经传到Github上了
https://github.com/Hankkin/MultiPurposeListView

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UVA 125 Numbering Paths

题意 给出方向&#xff08;有向&#xff09;然后判断从一个点到另一个点的方案数。如果有无数条那么对应位置置为-1 直接先dp处理出来。dp[i][j] sum(dp[i][k]*dp[k][j]) 同时如果两点之间有无限条路径。那么这两点之间必然有一环存在。有f[k][k]!0 #include <map> #…

linux 循环执行ip停止服务,java调用远程服务器的shell脚本以及停止的方法实现

最近接了个需求&#xff0c;要求远程调shell脚本&#xff0c;你没听错&#xff01;&#xff01;&#xff01;需求就一句话&#xff0c;咱是谁&#xff0c;咱是优秀的开发选手。考虑再三&#xff0c;有两种实现方式&#xff1a;方案一&#xff1a;脚本所在服务器安装一个客户端&…

mysql-防止XSS攻击

1,防止Xss攻击 数据库查询数据操作,为了防止注入,要执行参数化查询,也就是直接利用execute直接进行sql语句的执行, 因为exexute本身就有接收语句变量的参数位, execute()函数本身就有接受SQL语句变量的参数位&#xff0c;只要正确的使用&#xff08;直白一点就是&#xff1a;使…

java main方法背后的故事?(转)

jvm java 看似一种语言&#xff0c;实则一个巨大的体系的王国&#xff0c;开发这么多年了&#xff0c;还是没有搞懂,我以为我懂了&#xff0c;可是过了一段时间又忘了&#xff0c;所以说还是没懂 1、main方法说起 编译完我们的java文件后&#xff0c;需要有个一含有main方法的类…

亲历腾讯WEB前端开发三轮面试经历及面试题

【一面】~110分钟 2014/09/24 11:20 星期三 进门静坐30分钟做题。 填空题大题问答题 >>填空题何时接触电脑 何时接触前端运算符 字符串处理 延时 display position XMLHttpRequest 正则Jquery绑定事件 cookie >>大题BOM浏览器…

Redis的数据结构之字符串

原文&#xff1a;http://blog.java1234.com/blog/articles/316.html 五种数据类型&#xff1a; 字符串&#xff08;String&#xff09; 字符串列表&#xff08;list&#xff09; 有序字符串集合&#xff08;sorted set&#xff09; 哈希&#xff08;hash&#xff09; 字符串集合…

linux搜索日志组合条件,find查找

find查找是生产中最常见的日志查找工具下面看看它的用法基本用法&#xff1a;find 查找路径 查找标准 查找到以后的处理动作查找路径&#xff1a;需要被查找的文件所在的路径&#xff0c;一定是个目录&#xff0c;默认情况下为当前的目录查找的标准&#xff1a;查找的…

常用的JPA标记 (转)

Table Table用来定义entity主表的name&#xff0c;catalog&#xff0c;schema等属性。 元数据属性说明&#xff1a; name: 表名catalog: 对应关系数据库中的catalogschema&#xff1a;对应关系数据库中的schemaUniqueConstraints:定义一个UniqueConstraint数组&#xff0c;指定…

JavaBean技术的一些讲解

JavaBean: 由于原先的jsp的html代码和css代码以及java代码都是写在一起的&#xff0c;所以看起来就比较冗余&#xff0c;同时 也体现不了javaBean中面向对象的思想的{当然可以同过jstl标签库以及mvc框架来脱离java代码&#xff0c;但是这也是必不可少的} 在这里对于Javabean的一…

linux网卡名称乱编,小斗CentOS7.x网卡名称错乱、及网卡启动失败。

本帖最后由 Zack 于 2018-5-31 13:39 编辑最近在搞CentOS7装机的事情&#xff0c;在此记录期间遇到关于网卡方面的坑&#xff0c;整理分享下&#xff0c;以免大家继续再踩。一、在CentOS7默认装完系统之后网卡名称一改之前的名称习惯&#xff0c;网卡名称为enoxxxxx(之前命名规…

block传值 链接

iOS传值之block传值(一)转载于:https://www.cnblogs.com/dqxu/p/4016117.html

Maven——继承和聚合

实际项目中&#xff0c;可能正要构建一个大型的系统&#xff0c;但又不想一遍又一遍的重复同样的依赖元素&#xff0c;这种情况是经常出现的。不过还好&#xff0c;maven提供了继承机制&#xff0c;项目可以通过parent元素使用继承&#xff0c;可以避免这种重复。当一个项目声明…

隐藏linux操作系统版本信息,linux centos 如何查看操作系统版本信息?

本文介绍常用的四种查看linux下查看系统版本信息的方法&#xff1a;一、uname -a[appVM_11_211_centos ~]$ uname -aLinux VM_11_211_centos 2.6.32-504.30.3.el6.x86_64 #1 SMP Wed Jul 15 10:13:09 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux二、cat /proc/version[appVM_11_2…

iframe css练习

转载于:https://www.cnblogs.com/wenhuan/p/4019154.html

关于缓存的几篇好文章

追求极致&#xff1a;从技术细节看美团架构 Memcache架构新思考 Memcache应用场景介绍&#xff0c;说明[zz] 大型web系统数据缓存设计-l转载 大型网站后台架构的Web Server与缓存 Intelligence Computing 微博到底有多重视分布式缓存&#xff08;上&#xff09; Beanstalkd 一个…

linux 复制分区文件,dd复制分区后目标分区的大小变成原分区了

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我使用了dd if/dev/sda1 of/dev/sdb1这个命令,想复制分区sda1上的所有数据但是我原本sdb1是150G,dd之后,挂载后变成55G了(df -h输出结果)(也就是sda1的大小 )但是我用fdisk -l 得到的信息还是150G请问这种情况如何解决??acePerso…

Elasticsearch 5.2.x 使用 Head 插件连接不上集群

0、前言 时光荏苒&#xff0c;ES转眼间就从2.X跳到了5.X。。。忆往昔峥嵘岁月&#xff0c;奈何ES社区太活跃&#xff0c;版本跳的比房价还快啊。。。话说回来&#xff0c;需要部署一套Elasticsearch 5.2.1 即本月最新推出的ES新力作&#xff0c;发现很多用法已经不一样了。。。…

Javascript---Immediately-Invoked Function Expression (IIFE)立即执行的函数表达式

1.一下是几种形式的函数调用&#xff1a; 各种调用的效率&#xff1a;在这编文章中有谈到&#xff1a; http://suqing.iteye.com/blog/1981591 // Either of the following two patterns can be used to immediately invoke // a function expression, utilizing the functions…

extern 使用方法具体解释

在C语言中&#xff0c;修饰符extern用在变量或者函数的声明前&#xff0c;用来说明“此变量/函数是在别处定义的。要在此处引用”。&#xff08;extern能够置于变量或者函数前&#xff0c;以标示变量或者函数的定义在别的文件里&#xff0c;提示编译器遇到此变量和函数时在其它…

.NET常用工具类集锦

不错的地址&#xff1a; http://www.cnblogs.com/flashbar/archive/2013/01/23/helper.html https://github.com/chrisyanghua/MyHelper/tree/master/MyHelper http://www.cnblogs.com/conan87810/archive/2009/03/15/1412529.html http://www.cnblogs.com/ltp/archive/2008/03…