服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android高仿微信聊天界面代码分享

Android高仿微信聊天界面代码分享

2021-05-24 18:21easyer2012 Android

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

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

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

Android高仿微信聊天界面代码分享

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

Android高仿微信聊天界面代码分享

下面是activity的代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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<chatmsgentity> mdataarrays = new arraylist<chatmsgentity>();// 消息对象数组
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的代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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<chatmsgentity> coll;// 消息对象数组
private layoutinflater minflater;
public chatmsgviewadapter(context context, list<chatmsgentity> 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;
}
}

消息对象的代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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高仿微信聊天界面代码分享,希望对大家有所帮助。

延伸 · 阅读

精彩推荐
  • AndroidAndroid中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下...

    Android开发网7452021-03-11
  • AndroidAndroid CardView+ViewPager实现ViewPager翻页动画的方法

    Android CardView+ViewPager实现ViewPager翻页动画的方法

    本篇文章主要介绍了Android CardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Abby代黎明9602022-03-02
  • AndroidAndroid实现Service获取当前位置(GPS+基站)的方法

    Android实现Service获取当前位置(GPS+基站)的方法

    这篇文章主要介绍了Android实现Service获取当前位置(GPS+基站)的方法,较为详细的分析了Service基于GPS位置的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    Ruthless8342021-03-31
  • Android汇总Android视频录制中常见问题

    汇总Android视频录制中常见问题

    这篇文章主要汇总了Android视频录制中常见问题,帮助大家更好地解决Android视频录制中常见的问题,需要的朋友可以参考下...

    yh_thu5192021-04-28
  • AndroidAndroid实现固定屏幕显示的方法

    Android实现固定屏幕显示的方法

    这篇文章主要介绍了Android实现固定屏幕显示的方法,实例分析了Android屏幕固定显示所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    鉴客6192021-03-27
  • AndroidAndroid编程解析XML方法详解(SAX,DOM与PULL)

    Android编程解析XML方法详解(SAX,DOM与PULL)

    这篇文章主要介绍了Android编程解析XML方法,结合实例形式详细分析了Android解析XML文件的常用方法与相关实现技巧,需要的朋友可以参考下...

    liuhe68810052021-05-03
  • AndroidAndroid界面效果UI开发资料汇总(附资料包)

    Android界面效果UI开发资料汇总(附资料包)

    android ui界面设计,友好的界面会提高用户体验度;同时也增强了android ui界面设计的难度,本文提供了一些常用开发资料(有下载哦)感兴趣的朋友可以了解下...

    Android开发网4672021-01-03
  • AndroidAndroid程序设计之AIDL实例详解

    Android程序设计之AIDL实例详解

    这篇文章主要介绍了Android程序设计的AIDL,以一个完整实例的形式较为详细的讲述了AIDL的原理及实现方法,需要的朋友可以参考下...

    Android开发网4642021-03-09