简单记录一下

来源:互联网 发布:网络政治参与哪些平台 编辑:程序博客网 时间:2024/05/19 06:48
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;// 选择标签的idprivate String labelName = "家电维修";// 选择标签的名字@Overrideprotected 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);}@Overrideprotected 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")@Overridepublic 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() {@Overridepublic void onClick(View view) {alertDialog.dismiss();onBackPressed();}});dialog_cancel_item_btn.setOnClickListener(new OnClickListener() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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(){@Overridepublic void afterTextChanged(Editable editable) {}@Overridepublic void beforeTextChanged(CharSequence charsequence, int i, int j,int k) {}@Overridepublic 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")@Overridepublic 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")@Overridepublic 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 detectionstartActivityForResult(openAlbumIntent, CROP_CHOOSE_PICTURE);}/** 拍照和从相册中选图片后回调函数 **/@Overrideprotected 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  intY方向上的比例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();}@Overridepublic int getCount() {return demandItemList.size();}@Overridepublic Object getItem(int position) {return demandItemList.get(position);}@Overridepublic 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")@Overridepublic 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() {@Overridepublic 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")@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void onClick(View view) {alertDialog.dismiss();}});}};}/** 返回时候提示 **/@Overridepublic 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() {@Overridepublic void onClick(View view) {alertDialog.dismiss();onBackPressed();}});dialog_cancel_item_btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {alertDialog.dismiss();}});}return super.onKeyDown(keyCode, event);}}

1 0