ChatDemo

Project Url: Maxi-Mao/ChatDemo
Introduction: ListView、RecyclerView 两种方式实现聊天界面支持文字、表情、图片和语音信息,支持下拉加载更多
More: Author   ReportBugs   
Tags:
ListView-RecyclerView-聊天界面-

主界面选择实现方式:

image

文字表情示例图片:

image

图片发送示例图片:

image

语音发送示例动图:

image

注:RecyclerView 和 ListView 实现方式不同,些许功能不同,按需使用。

(按二者缓存方式的特性,建议类似聊天这种局部更新频繁的界面使用 RecyclerView。)

(RecyclerView 现已完善,如有 bug 通知我再修复)

16/11/7 更新:

  • 优化界面流畅度,主要优化 GifTextView 控件,和 RecyclerView 界面的流畅度,主要解决滑动时图片和文字表情的闪烁问题。

16/10/15 更新:

  • 添加消息数据库,用于保存聊天记录。 数据库用的是 GreenDao。数据分页加载。

因为是个 Demo,所以 ListView 和 RecyclerView 用的同一个表,大家只需看实现方式即可。

16/10/10 更新:

  • 添加 ListView 的实现方式:PullToRefreshListView

PullToRefreshRecyclerView 为 RecyclerView 的实现方式,若想切换 ListView 则需对 ChatActivity 和 PullToRefreshLayout 等做修改和一些属性修改。

ListView 适配器:ChatListViewAdapter

RecyclerView 适配器:ChatRecyclerAdapter

16/9/30 更新:

  • 界面由 ListView 改为 RecyclerView

  • 增加添加 item 动画

  • 修复界面随键盘弹起问题,类似微信。

  • 优化界面,提升用户体验

介绍:

  • 该项目是一个聊天界面,封装了包括文字、表情、图片和语音信息。
  • 支持静态表情,gif 表情,文字表情混排。图文混排实现参考:Android 聊天实现图文混编(包括 gif 显示)
  • 支持图片发送,裁剪图片形状,支持图片点击进入大图观看,支持放大缩小等。
  • 根据图片大小等比例缩放,并压缩显示。
  • 支持语音发送,接收语音未读状态显示,语音录制为 amr 格式保存文件,语音发送仿微信。
  • 语音播放工具可以参考另一个项目:android 语音播放工具(自带缓存)
  • 若想录制 mp3 格式参考:Android 录制 mp3 格式
  • 没有录音权限则提示用户。实现方式参考:Android 录音权限被禁解决方案
  • 语音、图片支持三种状态:发送中、发送失败和发送成功(发送失败显示感叹号)。
  • 支持下拉加载更多,下拉加载更多用了 ViewDragHelper,实现方式参考:Android 下拉刷新
  • 支持时间显示,默认大于一分钟显示一次,具体规则参见 ChatAdapter 类。可根据需求修改。

详细说明

ListView:

image

RecyclerView:

image

主要:

  • ChatActivity:聊天界面
  • ChatListViewAdapter:ListView 聊天界面适配器
  • ChatRecyclerAdapter:RecyclerView 聊天界面适配器
  • ChatBean:聊天数据对象

其他

  • ImageViewActivity:大图观看界面
  • AudioRecordButton:自定义录音控件
  • BubbleImageView:自定义图片裁剪控件
  • MediaManager:语音播放控件
  • GifTextView:自定义图文混排控件
  • pulltorefresh 包:自定义下拉加载更多控件(仅支持下拉加载更多)
  • SlideInOutBottomItemAnimator:RecyclerView 添加 item 动画(上滑)

图片加载使用 Glide。

为了优化性能,滑动的过程中 gif 为静态显示。

文字发送按钮为键盘中的回车。

后记:

该项目也是将之前做过的一些东西汇合了一下,时间比较短,大家就看一下具体的实现方式吧,可能有点乱,有时间的话我整理一下。

License

Copyright 2016 maojiqing

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea