读书人

仿微信聊天候泡效果实现

发布时间: 2012-09-27 11:11:17 作者: rapoo

仿微信聊天气泡效果实现

微信聊天窗口的信息效果类似iphone上的短信效果,以气泡的形式展现,在Android上,实现这种效果主要用到ListView和BaseAdapter,配合布局以及相关素材,就可以自己做出这个效果,素材可以下一个微信的APK,然后把后缀名改成zip,直接解压,就可以得到微信里面的所有素材了。首先看一下我实现的效果:

仿微信聊天候泡效果实现

以下是工程目录结构:

仿微信聊天候泡效果实现

接下来就是如何实现这个效果的代码:

main.xml,这个是主布局文件,显示listview和上下两部分内容。

public class ChatDemoActivity extends Activity {private Button sendButton = null;private EditText contentEditText = null;private ListView chatListView = null;private List<ChatEntity> chatList = null;private ChatAdapter chatAdapter = null;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.main);                contentEditText = (EditText) this.findViewById(R.id.et_content);        sendButton = (Button) this.findViewById(R.id.btn_send);        chatListView = (ListView) this.findViewById(R.id.listview);                chatList = new ArrayList<ChatEntity>();        ChatEntity chatEntity = null;        for (int i = 0; i < 2; i++) {        chatEntity = new ChatEntity();if (i % 2 == 0) {chatEntity.setComeMsg(false);chatEntity.setContent("Hello");chatEntity.setChatTime("2012-09-20 15:12:32");}else {chatEntity.setComeMsg(true);chatEntity.setContent("Hello,nice to meet you!");chatEntity.setChatTime("2012-09-20 15:13:32");}chatList.add(chatEntity);}                chatAdapter = new ChatAdapter(this,chatList);        chatListView.setAdapter(chatAdapter);                sendButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (!contentEditText.getText().toString().equals("")) {//发送消息send();}else {Toast.makeText(ChatDemoActivity.this, "Content is empty", Toast.LENGTH_SHORT).show();}}});            }        private void send(){    ChatEntity chatEntity = new ChatEntity();    chatEntity.setChatTime("2012-09-20 15:16:34");    chatEntity.setContent(contentEditText.getText().toString());    chatEntity.setComeMsg(false);    chatList.add(chatEntity);    chatAdapter.notifyDataSetChanged();    chatListView.setSelection(chatList.size() - 1);    contentEditText.setText("");    }        private  class ChatAdapter extends BaseAdapter{    private Context context = null;    private List<ChatEntity> chatList = null;    private LayoutInflater inflater = null;    private int COME_MSG = 0;    private int TO_MSG = 1;        public ChatAdapter(Context context,List<ChatEntity> chatList){    this.context = context;    this.chatList = chatList;    inflater = LayoutInflater.from(this.context);    }@Overridepublic int getCount() {return chatList.size();}@Overridepublic Object getItem(int position) {return chatList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic int getItemViewType(int position) {// 区别两种view的类型,标注两个不同的变量来分别表示各自的类型 ChatEntity entity = chatList.get(position); if (entity.isComeMsg()) { return COME_MSG; }else{ return TO_MSG; }}@Overridepublic int getViewTypeCount() {// 这个方法默认返回1,如果希望listview的item都是一样的就返回1,我们这里有两种风格,返回2return 2;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ChatHolder chatHolder = null;if (convertView == null) {chatHolder = new ChatHolder();if (chatList.get(position).isComeMsg()) {convertView = inflater.inflate(R.layout.chat_from_item, null);}else {convertView = inflater.inflate(R.layout.chat_to_item, null);}chatHolder.timeTextView = (TextView) convertView.findViewById(R.id.tv_time);chatHolder.contentTextView = (TextView) convertView.findViewById(R.id.tv_content);chatHolder.userImageView = (ImageView) convertView.findViewById(R.id.iv_user_image);convertView.setTag(chatHolder);}else {chatHolder = (ChatHolder)convertView.getTag();}chatHolder.timeTextView.setText(chatList.get(position).getChatTime());chatHolder.contentTextView.setText(chatList.get(position).getContent());chatHolder.userImageView.setImageResource(chatList.get(position).getUserImage());return convertView;}private class ChatHolder{private TextView timeTextView;private ImageView userImageView;private TextView contentTextView;}        }}


源代码传不上,需要的同学可以给我留邮箱,我发给你们。


欢迎关注我的新浪微博和我交流:@唐韧_Ryan


1楼yinlinqvan昨天 22:56
“下一个微信的APK,然后把后缀名改成zip,直接解压,就可以得到微信里面的所有素材了。”

读书人网 >移动开发

热点推荐