当前位置: 移动技术网 > IT编程>移动开发>Android > Android高仿微信聊天界面代码分享

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

木吉他独奏,高危险游戏,以租代购汽车

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

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

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<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的代码:

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; 
} 
} 

消息对象的代码:

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高仿微信聊天界面代码分享,希望对大家有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网