微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧。微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难。下面小编给大家分享实现代码。

先给大家展示下实现效果图:

OK,下面我们来看一下整个小项目的主体结构:

下面是Activity的代码:

package com.way.demo;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ListView;

/**

* @author way

*/

public class WeixinChatDemoActivity extends Activity implements OnClickListener {

private Button mBtnSend;// 发送btn

private Button mBtnBack;// 返回btn

private EditText mEditTextContent;

private ListView mListView;

private ChatMsgViewAdapter mAdapter;// 消息视图的Adapter

private List mDataArrays = new ArrayList();// 消息对象数组

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

initView();// 初始化view

initData();// 初始化数据

mListView.setSelection(mAdapter.getCount() - 1);

}

/**

* 初始化view

*/

public void initView() {

mListView = (ListView) findViewById(R.id.listview);

mBtnSend = (Button) findViewById(R.id.btn_send);

mBtnSend.setOnClickListener(this);

mBtnBack = (Button) findViewById(R.id.btn_back);

mBtnBack.setOnClickListener(this);

mEditTextContent = (EditText) findViewById(R.id.et_sendmessage);

}

private String[] msgArray = new String[] { "有大吗", "有!你呢?", "我也有", "那上吧",

"打啊!你放大啊!", "你TM咋不放大呢?留大抢人头啊?CAO!你个菜B", "2B不解释", "尼滚...",

"今晚去网吧包夜吧?", "有毛片吗?", "种子一大堆啊~还怕没片?", "OK,搞起!!" };

private String[] dataArray = new String[] { "2012-09-22 18:00:02",

"2012-09-22 18:10:22", "2012-09-22 18:11:24",

"2012-09-22 18:20:23", "2012-09-22 18:30:31",

"2012-09-22 18:35:37", "2012-09-22 18:40:13",

"2012-09-22 18:50:26", "2012-09-22 18:52:57",

"2012-09-22 18:55:11", "2012-09-22 18:56:45",

"2012-09-22 18:57:33", };

private final static int COUNT = 12;// 初始化数组总数

/**

* 模拟加载消息历史,实际开发可以从数据库中读出

*/

public void initData() {

for (int i = 0; i < COUNT; i++) {

ChatMsgEntity entity = new ChatMsgEntity();

entity.setDate(dataArray[i]);

if (i % 2 == 0) {

entity.setName("肖B");

entity.setMsgType(true);// 收到的消息

} else {

entity.setName("必败");

entity.setMsgType(false);// 自己发送的消息

}

entity.setMessage(msgArray[i]);

mDataArrays.add(entity);

}

mAdapter = new ChatMsgViewAdapter(this, mDataArrays);

mListView.setAdapter(mAdapter);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_send:// 发送按钮点击事件

send();

break;

case R.id.btn_back:// 返回按钮点击事件

finish();// 结束,实际开发中,可以返回主界面

break;

}

}

/**

* 发送消息

*/

private void send() {

String contString = mEditTextContent.getText().toString();

if (contString.length() > 0) {

ChatMsgEntity entity = new ChatMsgEntity();

entity.setName("必败");

entity.setDate(getDate());

entity.setMessage(contString);

entity.setMsgType(false);

mDataArrays.add(entity);

mAdapter.notifyDataSetChanged();// 通知ListView,数据已发生改变

mEditTextContent.setText("");// 清空编辑框数据

mListView.setSelection(mListView.getCount() - 1);// 发送一条消息时,ListView显示选择最后一项

}

}

/**

* 发送消息时,获取当前事件

*

* @return 当前时间

*/

private String getDate() {

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

return format.format(new Date());

}

}

ListView的代码:

package com.way.demo;

import java.util.List;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

/**

* 消息ListView的Adapter

*

* @author way

*/

public class ChatMsgViewAdapter extends BaseAdapter {

public static interface IMsgViewType {

int IMVT_COM_MSG = 0;// 收到对方的消息

int IMVT_TO_MSG = 1;// 自己发送出去的消息

}

private static final int ITEMCOUNT = 2;// 消息类型的总数

private List coll;// 消息对象数组

private LayoutInflater mInflater;

public ChatMsgViewAdapter(Context context, List coll) {

this.coll = coll;

mInflater = LayoutInflater.from(context);

}

public int getCount() {

return coll.size();

}

public Object getItem(int position) {

return coll.get(position);

}

public long getItemId(int position) {

return position;

}

/**

* 得到Item的类型,是对方发过来的消息,还是自己发送出去的

*/

public int getItemViewType(int position) {

ChatMsgEntity entity = coll.get(position);

if (entity.getMsgType()) {//收到的消息

return IMsgViewType.IMVT_COM_MSG;

} else {//自己发送的消息

return IMsgViewType.IMVT_TO_MSG;

}

}

/**

* Item类型的总数

*/

public int getViewTypeCount() {

return ITEMCOUNT;

}

public View getView(int position, View convertView, ViewGroup parent) {

ChatMsgEntity entity = coll.get(position);

boolean isComMsg = entity.getMsgType();

ViewHolder viewHolder = null;

if (convertView == null) {

if (isComMsg) {

convertView = mInflater.inflate(

R.layout.chatting_item_msg_text_left, null);

} else {

convertView = mInflater.inflate(

R.layout.chatting_item_msg_text_right, null);

}

viewHolder = new ViewHolder();

viewHolder.tvSendTime = (TextView) convertView

.findViewById(R.id.tv_sendtime);

viewHolder.tvUserName = (TextView) convertView

.findViewById(R.id.tv_username);

viewHolder.tvContent = (TextView) convertView

.findViewById(R.id.tv_chatcontent);

viewHolder.isComMsg = isComMsg;

convertView.setTag(viewHolder);

} else {

viewHolder = (ViewHolder) convertView.getTag();

}

viewHolder.tvSendTime.setText(entity.getDate());

viewHolder.tvUserName.setText(entity.getName());

viewHolder.tvContent.setText(entity.getMessage());

return convertView;

}

static class ViewHolder {

public TextView tvSendTime;

public TextView tvUserName;

public TextView tvContent;

public boolean isComMsg = true;

}

}

消息对象的代码:

package com.way.demo;

/**

* 一个消息的JavaBean

*

* @author way

*

*/

public class ChatMsgEntity {

private String name;//消息来自

private String date;//消息日期

private String message;//消息内容

private boolean isComMeg = true;// 是否为收到的消息

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getDate() {

return date;

}

public void setDate(String date) {

this.date = date;

}

public String getMessage() {

return message;

}

public void setMessage(String message) {

this.message = message;

}

public boolean getMsgType() {

return isComMeg;

}

public void setMsgType(boolean isComMsg) {

isComMeg = isComMsg;

}

public ChatMsgEntity() {

}

public ChatMsgEntity(String name, String date, String text, boolean isComMsg) {

super();

this.name = name;

this.date = date;

this.message = text;

this.isComMeg = isComMsg;

}

}

以上所述是小编给大家分享的Android高仿微信聊天界面代码分享,希望对大家有所帮助。

android仿微信聊天功能,Android高仿微信聊天界面代码分享相关推荐

  1. android 微信高仿,Android高仿微信聊天界面代码分享

    微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们 ...

  2. php写的微信聊天界面,Android_Android高仿微信聊天界面代码分享,微信聊天现在非常火,是因其 - phpStudy...

    Android高仿微信聊天界面代码分享 微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先 ...

  3. android 今日头条加载动画,高仿今日头条加载动画

    01 每每浏览手机app时,发现有的效果体验不错,作为一位程序员,总想要是自己来做,怎么实现. 今天我们来模仿今日头条的加载动画. 首先我们来看一下我们这个demo最终效果,有图有真相. 高仿今日头条 ...

  4. lol微信登录服务器,LOL部分大区开放微信登录功能 什么区能微信登录?

    英雄联盟官方在5月6日发布公告,称征服之海,均衡教派,卡拉曼达,巨龙之巢,皮尔特沃夫,峡谷之巅,男爵领域,教育网率先开放微信登录功能. 亲爱的召唤师: 我们将于 5 月 6 日在征服之海,均衡教派,卡 ...

  5. android模拟微信聊天功能,android仿微信聊天界面 语音录制功能

    本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图: 第一:chat.xml设计 android:layout_width="fill_parent" and ...

  6. android 微信评论功能,Android仿微信朋友圈点击评论自动定位到相关行功能.pdf

    Android仿仿微微信信朋朋友友圈圈点点击击评评论论自自动动定定位位到到相相关关行行功功能能 这篇文章主要介绍了android仿微信朋友圈点击评论自动定位到相关行功能的实现,本文图文并茂给大家介绍的 ...

  7. android 微信评论功能,Android仿微信朋友圈点赞和评论功能

    最近在做朋友圈的项目,所以写一个Android仿朋友圈点赞和评论功能Demo,代码就是简单实现了一下功能,没有做优化,凑合看. 图文排列是用的RecyclerView实现的,弹窗效果是用的自定义的Po ...

  8. android 微信点赞功能,Android 仿微信点赞和评论弹出框

    wjntekaqskfhwktpgpvzhp 1. 微信弹出框 微信朋友圈的点赞和评论功能,有2个组成部分: 左下角的"更多"按钮: 点击该按钮后弹出的对话框: 微信朋友圈点赞和评 ...

  9. android新消息提醒功能,Android仿微信新消息提示音

    怕有些人不知道怎么进入微信的新消息提示音功能,我这里说下操作步骤: 打开微信----我---设置---新消息提醒---新消息提示音. 经过以上的步骤就进入了这样的界面 具体实现的步骤. 难点之一:获取 ...

最新文章

  1. python读取大文件-使用Python读取大文件的方法
  2. CentOS系统Yum源配置
  3. Centos设置程序开机自启的方法
  4. 汽车电子嵌入式技术篇(二) -autosar中的嵌入式系统函数的调用
  5. android默认exported_android:exported 属性详解-阿里云开发者社区
  6. mysql left join、right join、inner join、union、union all使用以及图解
  7. 消息中间件--RabbitMQ ---TTL队列/消息
  8. 下一代AirPods可能就可以监测你的健康状况了
  9. OSChina 周日乱弹 ——不穿泳衣,我都不好意思上厕所
  10. 关于EL表达式中requestScope和param区别
  11. PHPKafka 1.0 发布,支持全部 50 个 API
  12. 【算法】排序_冒泡排序及其优化
  13. 啦啦外卖配送端APP打包
  14. 【操作系统】一起了解操作系统咯 | 原码,反码,补码,你理解到位了吗?
  15. Oracle RAC集群三种心跳机制
  16. 深入剖析Kubernetes--第五章:声明式API与Kubernetes编程范式
  17. Apache Curator客户端的使用
  18. Cravatar:WordPress网站Gravatar头像完美替代方法
  19. 如何用计算机玩扫雷,电脑扫雷技巧详细解析 扫雷游戏怎么玩
  20. 硬汉内贾德:让美国人战栗(推荐)

热门文章

  1. C语言高级用法---container_of()
  2. 初中级前端面试复习总结(浏览器、HTTP、前端安全)
  3. caffe 报错 Aborted(core dumped
  4. 推荐几个阿里,百度大佬的订阅号给大家
  5. css背景分割两种颜色
  6. 使用 openssl 创建自签发证书,含 IP证书 及 泛域名证书
  7. 【中亦安图】导致Oracle性能抖动的参数提醒(4)
  8. 在JS中根据身份证号计算出生日期和年龄
  9. element-ui中Cascader 级联选择器组件使用(默认选择是value(id),还想要获取label(name值))
  10. 计算机硬件的组成、python的开发层面及语法介绍