@Override
 public boolean onTouch(View v, MotionEvent event) {
   switch (event.getAction()) {
     case MotionEvent.ACTION_DOWN:
       if (!NetStateUtils.checkSdCard()) {
         ShowToast("发送语音需要sdcard支持!");
         return false;
       }
       try {
         v.setPressed(true);
         layout_record.setVisibility(View.VISIBLE);
         tv_voice_tips.setText(getString(R.string.chat_voice_cancel_tips));
         // 开始录音
         recordManager.startRecording(targetId);
       } catch (Exception e) {
       }
       return true;
     case MotionEvent.ACTION_MOVE:
       {
         if (event.getY() < 0) {
           tv_voice_tips.setText(getString(R.string.chat_voice_cancel_tips));
           tv_voice_tips.setTextColor(Color.RED);
         } else {
           tv_voice_tips.setText(getString(R.string.chat_voice_up_tips));
           tv_voice_tips.setTextColor(Color.WHITE);
         }
         return true;
       }
     case MotionEvent.ACTION_UP:
       v.setPressed(false);
       layout_record.setVisibility(View.INVISIBLE);
       try {
         if (event.getY() < 0) { // 放弃录音
           recordManager.cancelRecording();
           BmobLog.i("voice", "放弃发送语音");
         } else {
           int recordTime = recordManager.stopRecording();
           if (recordTime > 1) {
             // 发送语音文件
             BmobLog.i("voice", "发送语音");
             sendVoiceMessage(recordManager.getRecordFilePath(targetId), recordTime);
           } else { // 录音时间过短,则提示录音过短的提示
             layout_record.setVisibility(View.GONE);
             showShortToast().show();
           }
         }
       } catch (Exception e) {
       }
       return true;
     default:
       return false;
   }
 }
  @Override
  public void onClick(View v) {
    switch (v.getId()) {
      case R.id.edit_user_comment: // 点击文本输入框
        mListView.setSelection(mListView.getCount() - 1);
        if (layout_more.getVisibility() == View.VISIBLE) {
          layout_add.setVisibility(View.GONE);
          layout_emo.setVisibility(View.GONE);
          layout_more.setVisibility(View.GONE);
        }
        break;
      case R.id.btn_chat_emo: // 点击笑脸图标
        if (layout_more.getVisibility() == View.GONE) {
          showEditState(true);
        } else {
          if (layout_add.getVisibility() == View.VISIBLE) {
            layout_add.setVisibility(View.GONE);
            layout_emo.setVisibility(View.VISIBLE);
          } else {
            layout_more.setVisibility(View.GONE);
          }
        }

        break;
      case R.id.btn_chat_add: // 添加按钮-显示图片、拍照、位置
        if (layout_more.getVisibility() == View.GONE) {
          layout_more.setVisibility(View.VISIBLE);
          layout_add.setVisibility(View.VISIBLE);
          layout_emo.setVisibility(View.GONE);
          hideSoftInputView();
        } else {
          if (layout_emo.getVisibility() == View.VISIBLE) {
            layout_emo.setVisibility(View.GONE);
            layout_add.setVisibility(View.VISIBLE);
          } else {
            layout_more.setVisibility(View.GONE);
          }
        }

        break;
      case R.id.btn_chat_voice: // 语音按钮
        edit_user_comment.setVisibility(View.GONE);
        layout_more.setVisibility(View.GONE);
        btn_chat_voice.setVisibility(View.GONE);
        btn_chat_keyboard.setVisibility(View.VISIBLE);
        btn_speak.setVisibility(View.VISIBLE);
        hideSoftInputView();
        break;
      case R.id.btn_chat_keyboard: // 键盘按钮,点击就弹出键盘并隐藏掉声音按钮
        showEditState(false);
        break;
      case R.id.btn_chat_send: // 发送文本
        final String msg = edit_user_comment.getText().toString();
        if (msg.equals("")) {
          ShowToast("请输入发送消息!");
          return;
        }
        boolean isNetConnected = NetStateUtils.isNetworkAvailable(this);
        if (!isNetConnected) {
          ShowToast(R.string.network_error);
          // return;
        }
        // 组装BmobMessage对象
        BmobMsg message = BmobMsg.createTextSendMsg(this, targetId, msg);
        message.setExtra("Bmob");
        // 默认发送完成,将数据保存到本地消息表和最近会话表中
        manager.sendTextMessage(targetUser, message);
        // 刷新界面
        refreshMessage(message);

        break;
      case R.id.tv_camera: // 拍照
        selectImageFromCamera();
        break;
      case R.id.tv_picture: // 图片
        selectImageFromLocal();
        break;
      case R.id.tv_location: // 位置
        selectLocationFromMap();
        break;
      default:
        break;
    }
  }