Android高仿微信聊天界面代码分享
程序员文章站
2024-02-16 12:52:10
微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧。微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难。下面小编给大家分享实现代码。
先给大家展示...
微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧。微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难。下面小编给大家分享实现代码。
先给大家展示下实现效果图:
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高仿微信聊天界面代码分享,希望对大家有所帮助。