package com.circle.control.activity;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.provider.MediaStore;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Base64;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.circle.common.CommonConstant;
import com.circle.pojo.DemandItem;
import com.circle.service.DemandService;
import com.circle.service.impl.DemandServiceImpl;
import com.circle.util.ActivityUtil;
import com.circle.util.FileUtil;
import com.circle.util.ImageTools;
import com.circle.util.StringUtil;
import com.circle.util.ToastUtil;
import com.radius_circle.R;
@SuppressLint({ "InflateParams", "HandlerLeak" })
public class SendDemandActivity extends BaseActivity {
private Context context;
private LinearLayout title_left_ll;
private TextView title_tv;
private LinearLayout title_right_ll;
private Button title_right;
private ListView send_demand_content_lv;
private SendDemandItemAdapter sendDemandAdapter;
private Button send_demand_change_picture_btn; // 发送图片按钮
private LinearLayout send_demand_change_sound_ll; // 切换图片
private ImageView send_demand_change_sound_iv; // 要切换的图片
private Button send_demand_content_send_btn; // 发送文字内容按钮
private EditText send_demand_content_et; // 要发送文字内容
private RelativeLayout send_demand_show_photo_rl; // 显示拍照布局
private ImageView send_demand_choose_photo_iv; // 选择照片点击
private ImageView send_demand_take_photo_iv; // 拍照点击
private LinearLayout send_demand_show_sound_ll; // 显示录音布局
private Button send_demand_start_recoding_iv; // 录音点击
private boolean is_enable_record = false; // 是否读取到sd卡
private String saveSoundFilePath = ""; // 录音保存的路径
private String saveSoundFile = ""; // 录音文件全路径
private String soundData = "";
private int downX = 0; // 手移动的横坐标
private int downY = 0; // 手移动的纵坐标
private boolean is_record_success = false; // 本次的录音是否成功
private MediaRecorder mRecorder; // 录音操作对象
private long time;
private LinearLayout start_recording_anim_ll; // 开始录音动画布局
private TextView start_recording_hint_tv; // 开始录音提示文字
private ImageView start_recording_left_iv; // 录音动画
private ImageView start_recording_right_iv;
private Chronometer start_recording_time_tv; // 显示录音时间
private DemandService demandService; // 发送需求
private ProgressDialog dialog;
private Dialog alertDialog; // 弹出层提示
private View dialogView; // 弹出层布局
private TextView dialog_message_tv; // 弹出层内容
private Button dialog_confirm_item_btn; // 点击确定处理
private Button dialog_cancel_item_btn; // 点击取消处理
private Dialog dialog_sound; // 取消录音弹出层提示
private View dialog_view_sound; // 弹出层布局
private ImageView dialog_icon_iv; // 图标标识
private TextView dialog_sound_time_tv; // 弹出层内容
private Integer labelId = 8; // 选择标签的id
private String labelName = "家电维修"; // 选择标签的名字
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = SendDemandActivity.this;
setContentView(R.layout.activity_send_demand);
is_enable_record = checkSoundFile();
labelId = getIntent().getExtras().getInt("labelId");
labelName = getIntent().getExtras().getString("labelName");
initView();
initListView();
bindListenner();
}
/** 检查sd卡是否存在,并创建目录 **/
private boolean checkSoundFile(){
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {//是否有sd卡
sdcardDir = Environment.getExternalStorageDirectory();
String path = sdcardDir.getParent() + "/" + sdcardDir.getName();
String cacheDir = "/"+CommonConstant.ENGLISH_APP_NAME+"/demand/soundcache/";
saveSoundFilePath = path + cacheDir;
/** 创建目录 **/
File dir = new File(saveSoundFilePath);
if (!dir.exists()) {
dir.mkdirs();
}
bitmap_save_path = path+"/"+CommonConstant.ENGLISH_APP_NAME+"/imagecache/";
return true;
}else {
return false;
}
}
/** 初始化布局 **/
private void initView() {
title_left_ll = (LinearLayout)findViewById(R.id.title_left_ll);
title_tv = (TextView)findViewById(R.id.title_tv);
title_tv.setText("发送需求");
title_right_ll = (LinearLayout)findViewById(R.id.title_right_ll);
title_right_ll.setVisibility(View.VISIBLE);
title_right = (Button)findViewById(R.id.title_right);
title_right.setText("确认提交");
send_demand_content_lv = (ListView)findViewById(R.id.send_demand_content_lv);
send_demand_change_picture_btn = (Button)findViewById(R.id.send_demand_change_picture_btn);
send_demand_change_sound_ll = (LinearLayout)findViewById(R.id.send_demand_change_sound_ll);
send_demand_change_sound_iv = (ImageView)findViewById(R.id.send_demand_change_sound_iv);// 不负责点击事件
send_demand_content_send_btn = (Button)findViewById(R.id.send_demand_content_send_btn);
send_demand_content_et = (EditText)findViewById(R.id.send_demand_content_et); // 添加焦点事件若空改变图标
send_demand_show_photo_rl = (RelativeLayout)findViewById(R.id.send_demand_show_photo_rl);
send_demand_choose_photo_iv = (ImageView)findViewById(R.id.send_demand_choose_photo_iv);
send_demand_take_photo_iv = (ImageView)findViewById(R.id.send_demand_take_photo_iv);
start_recording_anim_ll = (LinearLayout)findViewById(R.id.start_recording_anim_ll);
start_recording_hint_tv = (TextView)findViewById(R.id.start_recording_hint_tv);
start_recording_left_iv = (ImageView)findViewById(R.id.start_recording_left_iv);
start_recording_right_iv = (ImageView)findViewById(R.id.start_recording_right_iv);
start_recording_time_tv = (Chronometer)findViewById(R.id.start_recording_time_tv);
start_recording_time_tv.setFormat("%s");
send_demand_show_sound_ll = (LinearLayout)findViewById(R.id.send_demand_show_sound_ll);
send_demand_start_recoding_iv = (Button)findViewById(R.id.send_demand_start_recoding_iv);
alertDialog = new Dialog(context, R.style.dialog);
LayoutInflater inflater = LayoutInflater.from(context);
dialogView = inflater.inflate(R.layout.dialog_del_comfirm_item, null);
dialog_message_tv = (TextView)dialogView.findViewById(R.id.dialog_message_tv);
dialog_confirm_item_btn = (Button)dialogView.findViewById(R.id.dialog_confirm_item_btn);
dialog_cancel_item_btn = (Button)dialogView.findViewById(R.id.dialog_cancel_item_btn);
alertDialog.setContentView(dialogView);
dialog_sound = new Dialog(context, R.style.dialog_bg_white);
LayoutInflater inflater1 = LayoutInflater.from(context);
dialog_view_sound = inflater1.inflate(R.layout.dialog_sound_cancel_alert, null);
dialog_icon_iv = (ImageView)dialog_view_sound.findViewById(R.id.sound_time_iv);
dialog_sound_time_tv = (TextView)dialog_view_sound.findViewById(R.id.sound_time_tv);
dialog_sound.setContentView(dialog_view_sound);
}
@Override
protected void onDestroy() {
if(CommonConstant.DEMAND_ITEM_LIST != null && CommonConstant.DEMAND_ITEM_LIST.size() > 0){
for (int i = 0; i < CommonConstant.DEMAND_ITEM_LIST.size(); i++) {
File filePath = CommonConstant.DEMAND_ITEM_LIST.get(i).getPictureFile();
if (filePath != null && filePath.exists()) {
filePath.delete();
}
}
CommonConstant.DEMAND_ITEM_LIST = null;
}
destoryBimap();
super.onDestroy();
}
private void initListView(){
CommonConstant.DEMAND_ITEM_LIST = new ArrayList<DemandItem>();
DemandItem firstDem = new DemandItem();
firstDem.setDemandTypeVo(CommonConstant.VALUE_KEFU_TEXT_MAX_LEFT);
CommonConstant.DEMAND_ITEM_LIST.add(firstDem);//添加默认最上面的数据源
sendDemandAdapter = new SendDemandItemAdapter(context, CommonConstant.DEMAND_ITEM_LIST);
send_demand_content_lv.setAdapter(sendDemandAdapter);
}
/** 添加布局点击事件监听器 **/
private void bindListenner() {
if (is_enable_record) {
send_demand_change_sound_ll.setOnClickListener(commonListener);
send_demand_start_recoding_iv.setOnClickListener(commonListener);
send_demand_start_recoding_iv.setOnTouchListener(start_recording_btn_touch_listener);
}
title_left_ll.setOnClickListener(commonListener);
title_right_ll.setOnClickListener(commonListener);
send_demand_content_et.addTextChangedListener(change_input_text_list);
send_demand_content_et.setOnClickListener(commonListener);
send_demand_change_picture_btn.setOnClickListener(commonListener);
send_demand_content_send_btn.setOnClickListener(commonListener);
send_demand_choose_photo_iv.setOnClickListener(commonListener);
send_demand_take_photo_iv.setOnClickListener(commonListener);
send_demand_content_lv.setOnTouchListener(windowTouchListener);
}
/** 总的点击事件处理 **/
private OnClickListener commonListener = new OnClickListener() {
@SuppressLint("NewApi")
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.send_demand_content_et: //点击text隐藏布局
if (send_demand_content_et.hasFocus()) {
send_demand_show_photo_rl.setVisibility(View.GONE);
send_demand_show_sound_ll.setVisibility(View.GONE);
}
break;
case R.id.title_left_ll: // 返回按钮
dialog_message_tv.setText("确认放弃本次编辑");
dialog_confirm_item_btn.setText("确定");
dialog_cancel_item_btn.setText("取消");
alertDialog.show();
dialog_confirm_item_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
alertDialog.dismiss();
onBackPressed();
}
});
dialog_cancel_item_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
alertDialog.dismiss();
}
});
break;
case R.id.title_right_ll: // 确认发送按钮
if (CommonConstant.DEMAND_ITEM_LIST != null && CommonConstant.DEMAND_ITEM_LIST.size() > 1) {
dialog_message_tv.setText("您确认要发送您的需求吗?");
dialog_confirm_item_btn.setTextColor(getResources().getColor(R.color.dialog_del_left_btn_text_color));
dialog_cancel_item_btn.setTextColor(getResources().getColor(R.color.public_theme_color));
dialog_confirm_item_btn.setText("返回编辑");
dialog_cancel_item_btn.setText("确认发送");
alertDialog.show();
dialog_confirm_item_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
dialog_confirm_item_btn.setTextColor(getResources().getColor(R.color.public_theme_color));
dialog_cancel_item_btn.setTextColor(getResources().getColor(R.color.public_black));
alertDialog.dismiss();
}
});
dialog_cancel_item_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
dialog_confirm_item_btn.setTextColor(getResources().getColor(R.color.public_theme_color));
dialog_cancel_item_btn.setTextColor(getResources().getColor(R.color.public_black));
alertDialog.dismiss();
if (dialog == null) {
dialog = new ProgressDialog(context);
}
dialog.setMessage("处理中请稍候...");
dialog.setCancelable(false);
dialog.show();
Thread thread = new Thread(new SendDemamdRunnable());
thread.start();
}
});
}
break;
case R.id.send_demand_change_picture_btn: // 切换图片按钮
// 判断 下方显示图片布局是否为显示,为显示的话就隐藏并显示键盘
if (send_demand_show_photo_rl.getVisibility() == View.VISIBLE) {
send_demand_show_photo_rl.setVisibility(View.GONE);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
} else {
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(SendDemandActivity.this .getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
send_demand_show_photo_rl.setVisibility(View.VISIBLE);
send_demand_show_sound_ll.setVisibility(View.GONE);
}
break;
case R.id.send_demand_change_sound_ll: // 改变语音图片
if (send_demand_show_sound_ll.getVisibility() == View.VISIBLE) {
send_demand_show_sound_ll.setVisibility(View.GONE);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
send_demand_change_sound_iv.setBackground(getResources().getDrawable(R.drawable.send_demand_show_sond));
}else {
send_demand_show_sound_ll.setVisibility(View.VISIBLE);
send_demand_show_photo_rl.setVisibility(View.GONE);
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(SendDemandActivity.this .getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
send_demand_change_sound_iv.setBackground(getResources().getDrawable(R.drawable.send_demand_show_input));
}
break;
case R.id.send_demand_start_recoding_iv: // 判断是否超出范围
if (CommonConstant.DEMAND_ITEM_LIST.size() > 6) {
send_demand_start_recoding_iv.setOnTouchListener(null);
ToastUtil.makeText(context, "不能超过3条");
}else {
send_demand_start_recoding_iv.setOnTouchListener(start_recording_btn_touch_listener);
}
break;
case R.id.send_demand_content_send_btn: // 发送文字
if (CommonConstant.DEMAND_ITEM_LIST.size() > 6) {
ToastUtil.makeText(context, "不能超过3条");
}else {
DemandItem demandItem = new DemandItem();
demandItem.setDemandTypeVo(CommonConstant.VALUE_MEMBER_TEXT_RIGHT);
demandItem.setContent(String.valueOf(send_demand_content_et.getText()));
CommonConstant.DEMAND_ITEM_LIST.add(demandItem);
DemandItem demo2 = new DemandItem();
demo2.setDemandTypeVo(CommonConstant.VALUE_KEFU_TEXT_MIN_LEFT);
CommonConstant.DEMAND_ITEM_LIST.add(demo2);
send_demand_content_et.setText("");
sendDemandAdapter.notifyDataSetChanged();
}
break;
case R.id.send_demand_choose_photo_iv: // 选择照片上传
if (CommonConstant.DEMAND_ITEM_LIST.size() > 6) {
ToastUtil.makeText(context, "不能超过3条");
}else {
getPictureByAlbum();
}
break;
case R.id.send_demand_take_photo_iv: // 拍照点击事件
if (CommonConstant.DEMAND_ITEM_LIST.size() > 6) {
ToastUtil.makeText(context, "您已经成功添加三条,不能在添加了哦,如果还想添的话可以试试删除上面的内容重新添加");
}else {
getPictureByCamera();
}// 拍照上传
break;
default:
break;
}
}
};
/** 屏幕点击后出发 **/
@SuppressLint("ClickableViewAccessibility")
private OnTouchListener windowTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
send_demand_show_photo_rl.setVisibility(View.GONE);
send_demand_show_sound_ll.setVisibility(View.GONE);
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(SendDemandActivity.this .getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
return false;
}
};
/** 输入法输入监听事件 **/
private TextWatcher change_input_text_list = new TextWatcher(){
@Override
public void afterTextChanged(Editable editable) {
}
@Override
public void beforeTextChanged(CharSequence charsequence, int i, int j,int k) {
}
@Override
public void onTextChanged(CharSequence charsequence, int i, int j, int k) {
if (!StringUtil.isNull(String.valueOf(send_demand_content_et.getText()))) {
send_demand_content_send_btn.setVisibility(View.VISIBLE);
send_demand_change_sound_iv.setVisibility(View.GONE);
send_demand_show_photo_rl.setVisibility(View.GONE);
send_demand_show_sound_ll.setVisibility(View.GONE);
} else {
send_demand_content_send_btn.setVisibility(View.GONE);
send_demand_change_sound_iv.setVisibility(View.VISIBLE);
}
}
};
/** 录音触摸事件处理 **/
@SuppressLint("ClickableViewAccessibility")
private OnTouchListener start_recording_btn_touch_listener = new OnTouchListener() {
@SuppressLint("NewApi")
@Override
public boolean onTouch(View view, MotionEvent event) {
if (CommonConstant.DEMAND_ITEM_LIST.size() <= 5) {
int x = (int)event.getX();
int y = (int)event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
dialog_sound_time_tv.setText("手指滑动取消录音");
dialog_sound_time_tv.setBackground(null);
dialog_icon_iv.setBackground(getResources().getDrawable(R.drawable.sound_cancel_icon));
dialog_sound.show();
start_recording_time_tv.setBase(SystemClock.elapsedRealtime());
send_demand_start_recoding_iv.setBackground(getResources().getDrawable(R.drawable.send_demand_play_down));
start_recording_anim_ll.setVisibility(View.VISIBLE);
start_recording_hint_tv.setVisibility(View.GONE);
AnimationDrawable left_animator = (AnimationDrawable) start_recording_left_iv.getBackground();
AnimationDrawable right_animator = (AnimationDrawable) start_recording_right_iv.getBackground();
left_animator.start();
right_animator.start();
saveSoundFile = saveSoundFilePath + new Date().getTime() + new Random().nextInt(999)+".3gp";
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(saveSoundFile);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mRecorder.start();
time = new Date().getTime();
start_recording_time_tv.start();
downY = y;
downX = x;
is_record_success = true;
break;
case MotionEvent.ACTION_MOVE:
if ((downY - y) > 97 || ((Math.abs(x - downX)) > 97)) {
dialog_sound_time_tv.setText("松开手指取消录音");
dialog_sound_time_tv.setBackground(getResources().getDrawable(R.drawable.circle_single_shen_hong_bg));
is_record_success = false;
send_demand_start_recoding_iv.setBackground(getResources().getDrawable(R.drawable.send_demand_play_up));
start_recording_anim_ll.setVisibility(View.GONE);
start_recording_hint_tv.setVisibility(View.VISIBLE);
}else {
dialog_sound_time_tv.setText("手指滑动取消录音");
dialog_sound_time_tv.setBackground(null);
is_record_success = true;
send_demand_start_recoding_iv.setBackground(getResources().getDrawable(R.drawable.send_demand_play_down));
start_recording_anim_ll.setVisibility(View.VISIBLE);
start_recording_hint_tv.setVisibility(View.GONE);
}
break;
case MotionEvent.ACTION_UP:
dialog_sound.dismiss();
send_demand_start_recoding_iv.setBackground(getResources().getDrawable(R.drawable.send_demand_play_up));
start_recording_anim_ll.setVisibility(View.GONE);
start_recording_hint_tv.setVisibility(View.VISIBLE);
start_recording_time_tv.stop();
mRecorder.stop();
mRecorder.release();
mRecorder = null;
long nowTime = new Date().getTime();
if (nowTime - time < 1000) {
ToastUtil.makeImageText(context, "按键时间太短");
is_record_success = false;
}
if (is_record_success) {
File file = new File(saveSoundFile);
FileInputStream inputFile = null;
byte[] buffer = null;
try {
inputFile = new FileInputStream(file);
buffer = new byte[(int)file.length()];
inputFile.read(buffer);
inputFile.close();
soundData = Base64.encodeToString(buffer, Base64.DEFAULT);
DemandItem demo1 = new DemandItem();
demo1.setDemandTypeVo(CommonConstant.VALUE_MEMBER_SOUND_RIGHT);
demo1.setSoundFilePath(saveSoundFile);
demo1.setSound(soundData);
CommonConstant.DEMAND_ITEM_LIST.add(demo1);
if(CommonConstant.DEMAND_ITEM_LIST.size() < 5){
DemandItem demo2 = new DemandItem();
demo2.setDemandTypeVo(CommonConstant.VALUE_KEFU_TEXT_MIN_LEFT);
CommonConstant.DEMAND_ITEM_LIST.add(demo2);
}
sendDemandAdapter.notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
}
}else {
File file = new File(saveSoundFile);
file.delete();
}
break;
default:
break;
}
}
return false;
}
};
/********************************** 发送需求线程 *************************************/
private class SendDemamdRunnable implements Runnable {
@SuppressLint("HandlerLeak")
@Override
public void run() {
StringBuffer contentSb = new StringBuffer();
StringBuffer soundSb = new StringBuffer();
List<File> list = new ArrayList<File>();
for (int i = 0; i < CommonConstant.DEMAND_ITEM_LIST.size(); i++) {
DemandItem dItem = CommonConstant.DEMAND_ITEM_LIST.get(i);
if (CommonConstant.VALUE_MEMBER_PICTURE_RIGHT.equals(dItem.getDemandTypeVo())) {
list.add(dItem.getPictureFile());
}else if (CommonConstant.VALUE_MEMBER_SOUND_RIGHT.equals(dItem.getDemandTypeVo())) {
if (StringUtil.isNull(soundSb.toString())) {
soundSb.append(dItem.getSound());
}else {
soundSb.append(";"+dItem.getSound());
}
}else if (CommonConstant.VALUE_MEMBER_TEXT_RIGHT.equals(dItem.getDemandTypeVo())) {
if (StringUtil.isNull(contentSb.toString())) {
contentSb.append(dItem.getContent());
}else {
contentSb.append(";"+dItem.getContent());
}
}
}
File [] paramFile = null;
if (list != null && list.size() > 0) {
paramFile = new File[list.size()];
for (int i = 0; i < list.size(); i++) {
paramFile[i] = list.get(i);
}
}
if (demandService == null) {
demandService = new DemandServiceImpl(context);
}
String url = FileUtil.getConfigProperty(context, "sendDemand");
boolean result = demandService.sendDemand(
String.valueOf(contentSb),
String.valueOf(soundSb),
labelId, labelName,url,"sendDemandPicture",paramFile);
Message msg = new Message();
if (result) {
msg.what = 1;
}else {
msg.what = 2;
}
sendDemandHandler.sendMessage(msg);
}
}
private Handler sendDemandHandler = new Handler(){
public void handleMessage(Message msg) {
dialog.dismiss();
if (msg.what == 1) {
Intent intent = new Intent(context,SendDemandSuccessActivity.class);
startActivity(intent);
finish();
}else {
Intent intent = new Intent(context,SendDemandErrorActivity.class);
startActivity(intent);
finish();
}
super.handleMessage(msg);
};
};
/********************************* 拍照上传辅助方法 *********************/
//拍照
private static final int TAKE_PICTURE = 1; // 裁剪图片
private static final int CROP_TAKE_PICTURE = 2; // 选择相册截图
private static final int CROP_CHOOSE_PICTURE = 3; // 选择相册截图
private File sdcardDir; // 头像保存文件路径
private String bitmap_save_path; // 头像保存路径
private File file = null; // 头像
private String user_name="zhangsan"; // 临时存储会员名
private Uri imageUri = null;
private Bitmap bitmap; // 生成的文件
/** 从相机获得图片 **/
private void getPictureByCamera() {
Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
file = new File(bitmap_save_path, user_name);
file.delete();
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
}
}
imageUri = Uri.fromFile(file);
openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(openCameraIntent, CROP_TAKE_PICTURE);
}
/** 从相册添加图片 **/
private void getPictureByAlbum() {
destoryBimap();
Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT,null);
imageUri = Uri.fromFile(new File(bitmap_save_path, user_name));
openAlbumIntent.setType("image/*");
openAlbumIntent.putExtra("crop", "false");
openAlbumIntent.putExtra("aspectX", 1);
openAlbumIntent.putExtra("aspectY", 2);
openAlbumIntent.putExtra("outputX", ActivityUtil.dip2px(context, 300));
openAlbumIntent.putExtra("outputY", ActivityUtil.dip2px(context, 600));
openAlbumIntent.putExtra("scale", false);
openAlbumIntent.putExtra("return-data", false);
openAlbumIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
openAlbumIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
openAlbumIntent.putExtra("noFaceDetection", true); // no face detection
startActivityForResult(openAlbumIntent, CROP_CHOOSE_PICTURE);
}
/** 拍照和从相册中选图片后回调函数 **/
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case TAKE_PICTURE:
cropImage(imageUri,1,2, 300, 600, CROP_TAKE_PICTURE);
break;
case CROP_TAKE_PICTURE:
if(imageUri != null){
//bit = ImageTools.decodeUriAsBitmap(context,imageUri);//decode bitmap
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
bitmap = BitmapFactory.decodeFile(file.getPath(), options);
}
file = ImageTools.savePhotoToSDCard(bitmap, bitmap_save_path, String.valueOf(new Date().getTime() + new Random().nextInt(999)));// 将图片保存在SD卡中
DemandItem demandItem = new DemandItem();
demandItem.setDemandTypeVo(CommonConstant.VALUE_MEMBER_PICTURE_RIGHT);
demandItem.setPictureFile(file);
demandItem.setPictureBit(bitmap);
CommonConstant.DEMAND_ITEM_LIST.add(demandItem);
DemandItem demo1 = new DemandItem();
demo1.setDemandTypeVo(CommonConstant.VALUE_KEFU_TEXT_MIN_LEFT);
CommonConstant.DEMAND_ITEM_LIST.add(demo1);
sendDemandAdapter.notifyDataSetChanged();
send_demand_show_photo_rl.setVisibility(View.GONE);
break;
case CROP_CHOOSE_PICTURE:
if(imageUri != null){
bitmap = ImageTools.decodeUriAsBitmap(context,imageUri);//decode bitmap
}
file = ImageTools.savePhotoToSDCard(bitmap, bitmap_save_path, String.valueOf(new Date().getTime() + new Random().nextInt(999)));// 将图片保存在SD卡中
DemandItem demandItem1 = new DemandItem();
demandItem1.setDemandTypeVo(CommonConstant.VALUE_MEMBER_PICTURE_RIGHT);
demandItem1.setPictureFile(file);
demandItem1.setPictureBit(bitmap);
CommonConstant.DEMAND_ITEM_LIST.add(demandItem1);
DemandItem demo2 = new DemandItem();
demo2.setDemandTypeVo(CommonConstant.VALUE_KEFU_TEXT_MIN_LEFT);
CommonConstant.DEMAND_ITEM_LIST.add(demo2);
sendDemandAdapter.notifyDataSetChanged();
send_demand_show_photo_rl.setVisibility(View.GONE);
break;
}
}
}
/**
* 截图的方法
* @param uri
* 图片路径
* @param aspectX
* X轴比例
* @param aspectY
* Y轴比例
* @param outputX
* 截图的宽
* @param outputY
* 截图的高
* @param requestCode
*
* 附加选项 数据类型 描述
crop String 发送裁剪信号
aspectX int X方向上的比例
aspectY int Y方向上的比例
outputX int 裁剪区的宽
outputY int 裁剪区的高
scale boolean 是否保留比例
return-data boolean 是否将数据保留在Bitmap中返回
data Parcelable 相应的Bitmap数据
circleCrop String 圆形裁剪区域?
MediaStore.EXTRA_OUTPUT ("output") URI 将URI指向相应的file:///
*/
public void cropImage(Uri uri, int aspectX, int aspectY, int outputX, int outputY, int requestCode) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("outputX", ActivityUtil.dip2px(context, outputX));
intent.putExtra("outputY", ActivityUtil.dip2px(context, outputY));
intent.putExtra("scale", true);
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true);
startActivityForResult(intent, requestCode);
}
/** 清除图片内存 **/
private void destoryBimap() {
if (bitmap != null && !bitmap.isRecycled()) {
bitmap.recycle();
bitmap = null;
}
}
/** 发送需求适配器 **/
class SendDemandItemAdapter extends BaseAdapter {
private List<DemandItem> demandItemList;
private LayoutInflater mInflater;
public static final int VALUE_MEMBER_SOUND_RIGHT = 0; // 5种不同的布局
public static final int VALUE_MEMBER_TEXT_RIGHT = 1;
public static final int VALUE_MEMBER_PICTURE_RIGHT = 2;
public static final int VALUE_KEFU_TEXT_MAX_LEFT = 3;
public static final int VALUE_KEFU_TEXT_MIN_LEFT = 4;
private MediaPlayer mPlayer = null;
private Context context;
public SendDemandItemAdapter(Context context, List<DemandItem> demandItemList) {
this.context = context;
this.demandItemList = demandItemList;
this.mInflater = LayoutInflater.from(context);
this.mPlayer = new MediaPlayer();
}
@Override
public int getCount() {
return demandItemList.size();
}
@Override
public Object getItem(int position) {
return demandItemList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public int getItemViewType(int position) {
int type = 0;
DemandItem entity = demandItemList.get(position);
if (CommonConstant.VALUE_MEMBER_SOUND_RIGHT.equals(entity.getDemandTypeVo())) {
type = 0;
} else if (CommonConstant.VALUE_MEMBER_TEXT_RIGHT.equals(entity.getDemandTypeVo())) {
type = 1;
} else if (CommonConstant.VALUE_MEMBER_PICTURE_RIGHT.equals(entity.getDemandTypeVo())) {
type = 2;
}else if (CommonConstant.VALUE_KEFU_TEXT_MAX_LEFT.equals(entity.getDemandTypeVo())) {
type = 3;
} else if (CommonConstant.VALUE_KEFU_TEXT_MIN_LEFT.equals(entity.getDemandTypeVo())) {
type = 4;
}
return type;
}
public int getViewTypeCount() {
return 5;
}
@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
DemandItem entity = demandItemList.get(position);
int type = getItemViewType(position);
ViewHolder0 viewHolder0 = null;
ViewHolder1 viewHolder1 = null;
ViewHolder2 viewHolder2 = null;
ViewHolder3 viewHolder3 = null;
if (convertView == null) {
switch (type) {
case VALUE_MEMBER_SOUND_RIGHT:
viewHolder0 = new ViewHolder0();
convertView = mInflater.inflate(R.layout.adapter_demand_member_sound, null);
viewHolder0.timeTv = (TextView)convertView.findViewById(R.id.send_demand_total_time_tv);
viewHolder0.delIv = (ImageView)convertView.findViewById(R.id.send_demand_sound_delete_iv);
viewHolder0.soundIv = (ImageView)convertView.findViewById(R.id.send_demand_sond_play_iv);
convertView.setTag(viewHolder0);
break;
case VALUE_MEMBER_TEXT_RIGHT:
viewHolder1 = new ViewHolder1();
convertView = mInflater.inflate(R.layout.adapter_demand_member_text, null);
viewHolder1.contentTv = (TextView)convertView.findViewById(R.id.send_demand_content_tv);
viewHolder1.delIv = (ImageView)convertView.findViewById(R.id.send_demand_content_delete_iv);
convertView.setTag(viewHolder1);
break;
case VALUE_MEMBER_PICTURE_RIGHT:
viewHolder2 = new ViewHolder2();
convertView = mInflater.inflate(R.layout.adapter_demand_member_picture, null);
viewHolder2.picIv = (ImageView)convertView.findViewById(R.id.send_demand_img_iv);
viewHolder2.delIv = (ImageView)convertView.findViewById(R.id.send_demand_img_delete_iv);
convertView.setTag(viewHolder2);
break;
case VALUE_KEFU_TEXT_MAX_LEFT:
convertView = mInflater.inflate(R.layout.adapter_demand_kefu_max, null);
break;
case VALUE_KEFU_TEXT_MIN_LEFT:
viewHolder3 = new ViewHolder3();
convertView = mInflater.inflate(R.layout.adapter_demand_kefu_min, null);
viewHolder3.showTv = (TextView)convertView.findViewById(R.id.adapter_demand_kefu_min);
convertView.setTag(viewHolder3);
break;
default:
break;
}
} else {
switch (type) {
case VALUE_MEMBER_SOUND_RIGHT:
viewHolder0 = (ViewHolder0) convertView.getTag();
break;
case VALUE_MEMBER_TEXT_RIGHT:
viewHolder1 = (ViewHolder1) convertView.getTag();
break;
case VALUE_MEMBER_PICTURE_RIGHT:
viewHolder2 = (ViewHolder2) convertView.getTag();
break;
case VALUE_KEFU_TEXT_MAX_LEFT:
break;
case VALUE_KEFU_TEXT_MIN_LEFT:
viewHolder3 = (ViewHolder3) convertView.getTag();
break;
default:
break;
}
}
switch (type) {
case VALUE_MEMBER_SOUND_RIGHT:
String saveSoundFile = entity.getSoundFilePath();
int soundTime = getSoundTime(saveSoundFile);
viewHolder0.timeTv.setText(soundTime + "\"");
viewHolder0.delIv.setTag(position);
viewHolder0.delIv.setOnClickListener(del_item_listener);
viewHolder0.soundIv.setTag(saveSoundFile);
viewHolder0.soundIv.setOnClickListener(sound_start_play_listener);
break;
case VALUE_MEMBER_TEXT_RIGHT:
viewHolder1.contentTv.setText(entity.getContent());
viewHolder1.delIv.setTag(position);
viewHolder1.delIv.setOnClickListener(del_item_listener);
break;
case VALUE_MEMBER_PICTURE_RIGHT:
viewHolder2.picIv.setBackground(new BitmapDrawable(entity.getPictureBit()));
viewHolder2.delIv.setTag(position);
viewHolder2.delIv.setOnClickListener(del_item_listener);
break;
case VALUE_KEFU_TEXT_MAX_LEFT:
break;
case VALUE_KEFU_TEXT_MIN_LEFT:
if (position == 2) {
viewHolder3.showTv.setText("如有补充可以继续添加。");
}else if(position == 4){
viewHolder3.showTv.setText("您还可以补充一条,请确认有没有向我们提供您的联系地址。");
}else {
viewHolder3.showTv.setText("您已经成功添加三条,不能在添加了哦,如果还想添的话可以试试删除上面的内容重新添加。");
}
break;
default:
break;
}
return convertView;
}
class ViewHolder0 {
TextView timeTv;
ImageView delIv;
ImageView soundIv;
}
class ViewHolder1 {
ImageView delIv;
TextView contentTv;
}
class ViewHolder2 {
ImageView delIv;
ImageView picIv;
}
class ViewHolder3 {
TextView showTv;
}
private int getSoundTime(String path){
if (mPlayer == null) {
mPlayer = new MediaPlayer();
}
int soundTime = 0;
try {
mPlayer.setDataSource(path);
mPlayer.prepare();
soundTime = mPlayer.getDuration()/1000;
} catch (Exception e) {
e.printStackTrace();
soundTime = -1;
}
mPlayer.release();
mPlayer = null;
return soundTime;
}
private boolean playing = false;
@SuppressLint("NewApi")
private OnClickListener sound_start_play_listener = new OnClickListener() {
@Override
public void onClick(final View v) {
if (!playing) {
v.setBackground(context.getResources().getDrawable(R.anim.start_playing_iv));
playing = true;
String fileName = String.valueOf(v.getTag());
try {
final AnimationDrawable animator = (AnimationDrawable) v.getBackground();
animator.start();
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource(fileName);
mPlayer.prepare();
mPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@SuppressLint("NewApi")
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
mp = null;
playing = false;
v.setBackground(context.getResources().getDrawable(R.drawable.default_sound));
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
/** 删除item点击监听器 **/
private OnClickListener del_item_listener = new OnClickListener() {
@Override
public void onClick(final View v) {
dialog_message_tv.setText("确认删除本条记录");
dialog_confirm_item_btn.setText("确定");
dialog_cancel_item_btn.setText("取消");
alertDialog.show();
dialog_confirm_item_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
alertDialog.dismiss();
int pos = (int)v.getTag();
if (demandItemList.get(pos) != null && !StringUtil.isNull(demandItemList.get(pos).getSoundFilePath())) {
File file = new File(demandItemList.get(pos).getSoundFilePath());
if (file.exists()) {
file.delete();
}
}
if (demandItemList.get(pos) != null && demandItemList.get(pos).getPictureFile() != null) {
File file = demandItemList.get(pos).getPictureFile();
if (file != null && file.exists()) {
file.delete();
}
}
demandItemList.remove(pos+1);
demandItemList.remove(pos);
notifyDataSetChanged();
}
});
dialog_cancel_item_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
alertDialog.dismiss();
}
});
}
};
}
/** 返回时候提示 **/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
dialog_message_tv.setText("确认放弃本次编辑");
dialog_confirm_item_btn.setText("确定");
dialog_cancel_item_btn.setText("取消");
alertDialog.show();
dialog_confirm_item_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
alertDialog.dismiss();
onBackPressed();
}
});
dialog_cancel_item_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
alertDialog.dismiss();
}
});
}
return super.onKeyDown(keyCode, event);
}
}
简单记录一下
最新推荐文章于 2021-04-03 14:58:29 发布