仿微信-界面动画(9)--ListView有不同类别Item
来源:互联网 发布:深圳爱玩网络 编辑:程序博客网 时间:2024/05/01 20:05
这次主要讲述的是如何实现微信聊天界面~
难点~不同种类的Item的组合
实现效果如下:
只是简单的界面设计,因此~无法实现真正的对话~切对话内容是源代码中明确写出的,这里主要是讲解的是不同Item的ListView的实现;
涉及到了,chatmsg实体,适配器等等~
根据类型的不同~分为两种R.layout.chatting_item_msg_text_left和R.layout.chatting_item_msg_text_right
示意图如下:
效果显而易见,看代码吧~
ChatActivity源码
package cn.buaa.myweixin;import java.util.ArrayList;import java.util.Calendar;import java.util.List;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.WindowManager;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;public class ChatActivity extends Activity implements OnClickListener{ /** Called when the activity is first created. */ private Button mBtnSend; private Button mBtnBack; private EditText mEditTextContent; private ListView mListView; private ChatMsgViewAdapter mAdapter; private List<ChatMsgEntity> mDataArrays = new ArrayList<ChatMsgEntity>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chat_xiaohei); //启动activity时不自动弹出软键盘 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); initView(); initData(); } 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[]{"你好啊,我是小黑,你呢?", "我是人马,很高兴认识你", "我也是", "一起玩会游戏?", "可以啊,但是我好久没玩了,可能比较坑", "没事啊,我也有点不会玩的", "不解释,哈哈哈哈", "gogogo~~~",}; private String[]dataArray = new String[]{"2016-09-01 18:00", "2016-09-01 18:10", "2016-09-01 18:11", "2016-09-01 18:20", "2016-09-01 18:30", "2016-09-01 18:35", "2016-09-01 18:40", "2016-09-01 18:50"}; private final static int COUNT = 8; public void initData() { for(int i = 0; i < COUNT; i++) { ChatMsgEntity entity = new ChatMsgEntity(); entity.setDate(dataArray[i]); if (i % 2 == 0) { entity.setName("小黑"); entity.setMsgType(true); }else{ entity.setName("人马"); entity.setMsgType(false); } entity.setText(msgArray[i]); mDataArrays.add(entity); } mAdapter = new ChatMsgViewAdapter(this, mDataArrays); mListView.setAdapter(mAdapter); } @Override public void onClick(View v) { // TODO Auto-generated method stub 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.setDate(getDate()); entity.setName("人马"); //我是人马,都是以人马的口吻进行的发送 entity.setMsgType(false); entity.setText(contString); mDataArrays.add(entity); mAdapter.notifyDataSetChanged(); //提示适配器更新 mEditTextContent.setText(""); //清空editText mListView.setSelection(mListView.getCount() - 1); } } private String getDate() { Calendar c = Calendar.getInstance(); String year = String.valueOf(c.get(Calendar.YEAR)); String month = String.valueOf(c.get(Calendar.MONTH) + 1); String day = String.valueOf(c.get(Calendar.DAY_OF_MONTH)); String hour = String.valueOf(c.get(Calendar.HOUR_OF_DAY)); String mins = String.valueOf(c.get(Calendar.MINUTE)); StringBuffer sbBuffer = new StringBuffer(); sbBuffer.append(year + "-" + month + "-" + day + " " + hour + ":" + mins); return sbBuffer.toString(); } public void head_xiaohei(View v) { //标题栏 返回按钮 Intent intent = new Intent (ChatActivity.this,InfoXiaohei.class); startActivity(intent); } }
ChatMsgViewAdapter源码
package cn.buaa.myweixin;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import java.util.List;public class ChatMsgViewAdapter extends BaseAdapter { public static interface IMsgViewType { int IMVT_COM_MSG = 0; int IMVT_TO_MSG = 1; } private static final String TAG = ChatMsgViewAdapter.class.getSimpleName(); private List<ChatMsgEntity> coll; private Context ctx; private LayoutInflater mInflater; public ChatMsgViewAdapter(Context context, List<ChatMsgEntity> coll) { ctx = context; this.coll = coll; mInflater = LayoutInflater.from(context); } @Override public int getCount() { return coll.size(); } @Override public Object getItem(int position) { return coll.get(position); } @Override public long getItemId(int position) { return position; } @Override public int getItemViewType(int position) { // TODO Auto-generated method stub ChatMsgEntity entity = coll.get(position); if (entity.getMsgType()) { return IMsgViewType.IMVT_COM_MSG; }else{ return IMsgViewType.IMVT_TO_MSG; } } @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 2; } @Override 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.getText()); return convertView; } static class ViewHolder { public TextView tvSendTime; public TextView tvUserName; public TextView tvContent; public boolean isComMsg = true; }}
ChatMsgEntity源码
package cn.buaa.myweixin;public class ChatMsgEntity { private static final String TAG = ChatMsgEntity.class.getSimpleName(); private String name; private String date; private String text; 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 getText() { return text; } public void setText(String text) { this.text = text; } 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.text = text; this.isComMeg = isComMsg; }}
R.layout.chatting_item_msg_text_left
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="6dp"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal"> <TextView android:id="@+id/tv_sendtime" android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/chat_text_date_style"/> </LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_marginLeft="5dp" > <ImageView android:id="@+id/iv_userhead" android:layout_width="52dp" android:layout_height="52dp" android:clickable="true" android:onClick="head_xiaohei" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:background="@drawable/xiaohei"/> <TextView android:id="@+id/tv_chatcontent" android:layout_toRightOf="@id/iv_userhead" android:layout_marginLeft="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/chatfrom_bg" style="@style/chat_content_date_style"/> <TextView android:id="@+id/tv_username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/iv_userhead" android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/tv_chatcontent" style="@style/chat_text_name_style"/> </RelativeLayout></LinearLayout>
R.layout.chatting_item_msg_text_right
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="6dp" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal"> <TextView android:id="@+id/tv_sendtime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="2dp" android:textColor="#ffffff" android:textSize="12sp" android:background="#bfbfbf"/> </LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_marginRight="5dp" > <ImageView android:id="@+id/iv_userhead" android:layout_width="52dp" android:layout_height="52dp" android:focusable="false" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:background="@drawable/renma"/> <TextView android:id="@+id/tv_chatcontent" android:layout_toLeftOf="@id/iv_userhead" android:layout_marginRight="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/chatto_bg" android:textSize="15sp" android:textColor="#ff000000" android:gravity="left|center" android:minHeight="50dp" android:lineSpacingExtra="2dp" android:clickable="true" android:focusable="true"/> <TextView android:id="@+id/tv_username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/iv_userhead" android:layout_alignParentRight="true" android:layout_toRightOf="@id/tv_chatcontent" android:textSize="15sp" android:gravity="center" android:textColor="#818181"/> </RelativeLayout></LinearLayout>
R.layout.chat_xiaohei
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/chat_bg_default" > <RelativeLayout android:id="@+id/rl_layout" android:layout_width="fill_parent" android:layout_height="45dp" android:background="@drawable/title_bar" android:gravity="center_vertical" > <Button android:id="@+id/btn_back" android:layout_width="70dp" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="返回" android:textSize="14sp" android:textColor="#fff" android:onClick="chat_back" android:background="@drawable/title_btn_back" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="小黑" android:layout_centerInParent="true" android:textSize="20sp" android:textColor="#ffffff" /> <ImageButton android:id="@+id/right_btn" android:layout_width="67dp" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="5dp" android:src="@drawable/mm_title_btn_contact_normal" android:background="@drawable/title_btn_right" /> </RelativeLayout> <RelativeLayout android:id="@+id/rl_bottom" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="@drawable/chat_footer_bg" > <Button android:id="@+id/btn_send" android:layout_width="60dp" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:layout_centerVertical="true" android:text="发送" android:background="@drawable/chat_send_btn" /> <EditText android:id="@+id/et_sendmessage" android:layout_width="fill_parent" android:layout_height="40dp" android:layout_toLeftOf="@id/btn_send" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:background="@drawable/login_edit_normal" android:layout_centerVertical="true" android:singleLine="true" android:textSize="18sp"/> </RelativeLayout> <ListView android:id="@+id/listview" android:layout_below="@id/rl_layout" android:layout_above="@id/rl_bottom" android:layout_width="fill_parent" android:layout_height="fill_parent" android:divider="@null" android:dividerHeight="5dp" android:stackFromBottom="true" android:scrollbarStyle="outsideOverlay" android:cacheColorHint="#0000"/></RelativeLayout>
直接上代码了,看了之前的实例的小伙伴们应该都看的很清楚啦~就不赘述了~,谢谢~
1 0
- 仿微信-界面动画(9)--ListView有不同类别Item
- ListView展示不同类别
- 类似QQ聊天界面,ListView的item显示不同布局
- 如何让Listview的item有不同样子
- listview如何加载动画,实现每个item都有效果
- listview不同item
- ListView设置不同item
- Gallery3D主界面,自定义XML,子Item有动画效果
- listview的item动画
- ListView item 动画
- ListView的Item上有Button按钮,点击执行单个Item删除动画
- listview item显示不同布局
- 实现ListView不同的Item
- android listview item不同视图
- listview 中的不同 item 实现
- ListView定制不同的Item
- listView 加载不同布局item
- listView的不同item展示
- JS为循环动态生成的节点添加点击事件
- 安卓智慧上海学习笔记系列——禁用ViewPager滑动事件
- Oracle START WITH ... CONNECT BY PRIOR 带条件会有重复
- 背包九讲之多重背包问题
- Leetcode 24 Swap Nodes in Pairs
- 仿微信-界面动画(9)--ListView有不同类别Item
- Github上传项目步骤和常见问题
- java 99乘法表
- stl中pair容器的用法
- UVa213
- Cookie防伪造
- HTML基础
- 修改Tomcat服务器端口
- MarkDown 基本语法备忘