仿微信通讯界面

http://blog.youkuaiyun.com/vanpersie_9987/article/details/52761372

http://www.jb51.net/article/79129.htm

http://blog.youkuaiyun.com/nana129/article/details/45030057

http://104zz.iteye.com/blog/1709840

--------------------------------------------------------------------------------

[附件:FreebackDemoActivity.java]
package com.hipad.news.activity.personal;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import com.hipad.controller.SSOController;
import com.hipad.news.activity.TitleBar;
import com.hipad.news.bean.ChatMsgEntity;
import com.hipad.news.main.R;
import com.hipad.news.main.R.layout;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.SpannableString;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class FreebackDemoActivity extends Activity implements OnClickListener {
	private SSOController ssoController;
	private TitleBar tilleBar;
	private Button mBtnSend;
	private EditText mEditTextContent;
	private ListView mListView;
	private ChatMsgAdapter mAdapter;
	private List<ChatMsgEntity> mDataArrays = new ArrayList<ChatMsgEntity>();
	private boolean isShosrt = false;
	private String[] msgArray = new String[] { "你好服务器", "你也好", "请问你有什么问题", "我的问题多着呢 ", "先跟你反馈一个吧", "好的你说,我解决" };

	private String[] dataArray = new String[] { "2012-10-31 18:00", "2012-10-31 18:10", "2012-10-31 18:11",
			"2012-10-31 18:20", "2012-10-31 18:30", "2012-10-31 18:35" };
	private final static int COUNT = 6;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_freeback_demo);
		tilleBar = (TitleBar) findViewById(R.id.title_bar);
		tilleBar.setTitle("意见反馈");
		// 启动activity时不自动弹出软键盘
		getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
		initView();
		initData();
	}

	public void initView() {
		mBtnSend = (Button) findViewById(R.id.send);
		mEditTextContent = (EditText) findViewById(R.id.input_text);
		mListView = (ListView) findViewById(R.id.msg_list_view);
		mBtnSend.setOnClickListener(this);
		mEditTextContent.setOnClickListener(this);
//		mListView.setOnClickListener(this);
	}

	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 ChatMsgAdapter(this, mDataArrays);
		mListView.setAdapter(mAdapter);
	}
	public 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("");
			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));
		String day = String.valueOf(c.get(Calendar.DAY_OF_MONTH) + 1);
		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();
	}
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.send:
			send();
			break;
		default:
			break;
		}
	}
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK){
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
	public class ChatMsgAdapter extends BaseAdapter {
		int IMVT_COM_MSG = 0;
		int IMVT_TO_MSG = 1;
		private Context context;
		private List<ChatMsgEntity> mdataArrays;
		public ChatMsgAdapter(Context context,List<ChatMsgEntity> mdataArrays) {
			super();
			this.context = context;
			this.mdataArrays = mdataArrays;
		}

		@Override
		public int getCount() {
			return mdataArrays.size();
		}

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

		@Override
		public long getItemId(int position) {
			return position;
		}
		public int getItemViewType(int position) {  
	        ChatMsgEntity entity = mdataArrays.get(position);  
	  
	        if (entity.getMsgType()) {  
	            return IMVT_COM_MSG;  
	        } else {  
	            return IMVT_TO_MSG;  
	        }  
	  
	    }  
	  
	    public int getViewTypeCount() {  
	        return 2;  
	    }  
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			final ChatMsgEntity entity = mdataArrays.get(position);  
	        boolean isComMsg = entity.getMsgType();  
			ViewHolder viewHolder = null;
			if (convertView == null) {
				if (isComMsg) {
					convertView = LayoutInflater.from(context).inflate(R.layout.freeback_list_item_left, parent, false);
					
				} else {
					convertView = LayoutInflater.from(context).inflate(R.layout.freeback_list_item_right, parent, false);
				}
				viewHolder = new ViewHolder();
				viewHolder.tv_date = (TextView) convertView.findViewById(R.id.tv_sendtime);
				viewHolder.tv_content = (TextView) convertView.findViewById(R.id.left_msg);
				viewHolder.photo = (ImageView) convertView.findViewById(R.id.photo_left);
				viewHolder.text_name = (TextView) convertView.findViewById(R.id.textname_left);
				viewHolder.isComMsg = isComMsg;
				convertView.setTag(viewHolder);

			} else {
				viewHolder = (ViewHolder) convertView.getTag();
			}
			// 设置数据
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			viewHolder.tv_date.setText(entity.getDate());
			String spannableString = entity.getText().toString();//FaceConversionUtil.getInstace().getExpressionString(context, entity.getText());
			viewHolder.tv_content.setText(spannableString);
			return convertView;
		}

		private class ViewHolder {
			private TextView tv_date;
			private TextView tv_content;
			private ImageView photo;
			private TextView text_name;
			public boolean isComMsg = true;
		}
	}
}
左面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp" >

    <TextView
        android:id="@+id/tv_sendtime"
        style="@style/chat_text_date_style"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" />

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_gravity="left">

        <RelativeLayout
            android:id="@+id/left_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            >
            <ImageView
                android:id="@+id/photo_left"
                android:layout_width="@dimen/pad_height_40"
                android:layout_height="@dimen/pad_height_40"
                android:src="@drawable/default_touxiangbg_one" />
            <TextView 
                android:id="@+id/textname_left"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/pad_height_15"
                android:text="名字"
                android:textSize="12sp"
                android:layout_below="@+id/photo_left"/>
        </RelativeLayout>

        <TextView
            android:id="@+id/left_msg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/message_left"
            android:layout_toRightOf="@+id/left_layout"
            android:layout_alignTop="@+id/left_layout"
            />
    </RelativeLayout>

</LinearLayout>

右面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp" >

    <TextView
        android:id="@+id/tv_sendtime"
        style="@style/chat_text_date_style"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" />

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right" >

        <TextView
            android:id="@+id/left_msg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/right_layout"
            android:background="@drawable/message_right" />

        <RelativeLayout
            android:id="@+id/right_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp" 
            android:layout_toRightOf="@+id/left_msg">

            <ImageView
                android:id="@+id/photo_left"
                android:layout_width="@dimen/pad_height_40"
                android:layout_height="@dimen/pad_height_40"
                android:src="@drawable/default_touxiangbg_one" />

            <TextView
                android:id="@+id/textname_left"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/pad_height_15"
                android:layout_below="@+id/photo_left"
                android:text="名字"
                android:textSize="12sp" />
        </RelativeLayout>
    </RelativeLayout>

</LinearLayout>






                
一、数据采集层:多源人脸数据获取 该层负责从不同设备 / 渠道采集人脸原始数据,为后续模型训练与识别提供基础样本,核心功能包括: 1. 多设备适配采集 实时摄像头采集: 调用计算机内置摄像头(或外接 USB 摄像头),通过OpenCV的VideoCapture接口实时捕获视频流,支持手动触发 “拍照”(按指定快捷键如Space)或自动定时采集(如每 2 秒采集 1 张),采集时自动框选人脸区域(通过Haar级联分类器初步定位),确保样本聚焦人脸。 支持采集参数配置:可设置采集分辨率(如 640×480、1280×720)、图像格式(JPG/PNG)、单用户采集数量(如默认采集 20 张,确保样本多样性),采集过程中实时显示 “已采集数量 / 目标数量”,避免样本不足。 本地图像 / 视频导入: 支持批量导入本地人脸图像文件(支持 JPG、PNG、BMP 格式),自动过滤非图像文件;导入视频文件(MP4、AVI 格式)时,可按 “固定帧间隔”(如每 10 帧提取 1 张图像)或 “手动选择帧” 提取人脸样本,适用于无实时摄像头场景。 数据集对接: 支持接入公开人脸数据集(如 LFW、ORL),通过预设脚本自动读取数据集目录结构(按 “用户 ID - 样本图像” 分类),快速构建训练样本库,无需手动采集,降低系统开发与测试成本。 2. 采集过程辅助功能 人脸有效性校验:采集时通过OpenCV的Haar级联分类器(或MTCNN轻量级模型)实时检测图像中是否包含人脸,若未检测到人脸(如遮挡、侧脸角度过大),则弹窗提示 “未识别到人脸,请调整姿态”,避免无效样本存入。 样本标签管理:采集时需为每个样本绑定 “用户标签”(如姓名、ID 号),支持手动输入标签或从 Excel 名单批量导入标签(按 “标签 - 采集数量” 对应),采集完成后自动按 “标签 - 序号” 命名文件(如 “张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值