android 实现微信聊天界面效果

      微信的聊天效果实际使用的是一个listview 控件,通过改变listview 中 adapter 的数据,并通过 adapter.notifyDataSetChanged();来实时更新界面,并且用令以函数对其中的listview展示项进行定位。


实现的主要效果如下:

聊天界面1 聊天界面2


主要代码:

package com.wechart.activity;

import java.util.ArrayList;
import java.util.List;


import android.content.Context;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class TalkingView extends RelativeLayout {

	private Context context;
	private LayoutInflater inflater = null;
	private RelativeLayout talingView = null;
	private Button bt_send_msg = null;
	private EditText et_msg_info = null;
	private ListViewAdapter lvadapter = null;
	private List list_message = null;
	
	
	private ListView lv_info_contain = null;
	
	public TalkingView(Context context) {
		super(context);
		this.context = context;
		this.inflater = LayoutInflater.from(this.context);
		
		
		this.list_message = new ArrayList();
		this.inItList();
		this.inIt();
		this.lvadapter = new ListViewAdapter();
		this.lv_info_contain.setAdapter(this.lvadapter);
		this.lv_info_contain.setSelection(list_message.size() - 1);
	}
	
	
	private void  inItList(){
		this.list_message.add("放大!");
		this.list_message.add("我也想放啊>_<");
		this.list_message.add("大cd早点说V_V");
		this.list_message.add("。。。。");
		
		
	}
	
	private void inIt(){//初始化界面
		this.talingView = (RelativeLayout) this.inflater.inflate(R.layout.message_layout,null);
		this.addView(talingView);
		
		this.bt_send_msg = (Button) talingView.findViewById(R.id.bt_send_msginfo);
		this.et_msg_info = (EditText) talingView.findViewById(R.id.et_msgInfo);
		this.lv_info_contain = (ListView) talingView.findViewById(R.id.lv_contain_msg);
		
	
		this.bt_send_msg.setOnClickListener(new OnClickListener() {//发送消息
			
			@Override
			public void onClick(View v) {
				String info = et_msg_info.getText().toString();
				if(info.equals("")){
				  Toast.makeText(getContext(),"消息不能为空", 0).show();
				  return ;
				}
				
				et_msg_info.setText("");
				list_message.add(info);
				lvadapter.notifyDataSetChanged();//list中数据发生变化时,adapter更新数据
                lv_info_contain.setSelection(list_message.size()-1);//选中最后一行
                
              
			}
		});
	}
	
	
	
	
	private class ListViewAdapter extends BaseAdapter{//适配器--内部类

		@Override
		public int getCount() {
			if(list_message == null){
				return 0;
			}
			return list_message.size();
		}

		@Override
		public Object getItem(int position) {
			return list_message.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			
			View v = null;
			if(position%2 == 0){//当position 为偶数时,为发出消息
				v = inflater.inflate(R.layout.messageto, null);
				TextView tv = (TextView) v.findViewById(R.id.tv_show_tomsg);
				tv.setText(list_message.get(position));
				
			}else{
				v = inflater.inflate(R.layout.messageinfocom, null);
				TextView tv = (TextView) v.findViewById(R.id.tv_show_comemsg);
				
				tv.setText(list_message.get(position));
			}
			
			return v;
		}
		
	}
	
	

}


代码中所用的一些资源是将微信的apk改成.zip解压过后得到的。其中聊天时两个布局界面的,一个是接受界面,一个是发送的。这里使用的是查看消息List中展示的数据在列表中时奇数还是偶数的。

有什么问题,欢迎大家留言。

源码下载地址:http://download.csdn.net/detail/luinsist/4848821



  

你可能感兴趣的:(android)