package com.partynetwork.iparty.ishare; import java.io.File; import java.util.Date; import com.partynetwork.dataprovider.util.BitmapUtil; import com.partynetwork.iparty.R; import com.partynetwork.iparty.app.common.BitmapManager; import com.partynetwork.iparty.ishare.IsharePublishActivity.photoChangeListener; import com.partynetwork.iparty.ishare.IsharePublishActivity.photoInfoListener; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; import android.provider.MediaStore; import android.provider.MediaStore.Images.Media; import android.text.format.DateFormat; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; public class IsharePublishPhoto implements OnClickListener { public static final int SELECT_PICTURE = 100; public static final int SELECT_CAMER = 101; private View view; private Activity activity; // 选择层 private LinearLayout choose_layer; // 照片层 private RelativeLayout photo_layer; // 默认层 private ImageView normal_layer; // 选择照片按钮 private TextView choose_photo_tv; // 从相机拍照 private TextView camera_tv; // 照片 private ImageView body_bg; // 删除按钮 private ImageView delete_iv; // 编辑按钮 private ImageView edit_iv; // 最后选择的图片地址 String filePath = ""; // 选择照片的回调监听 private photoChangeListener changeListener; // 编辑照片的回调监听 private photoInfoListener infoListener; private IsharePublishPhotoInfo photoInfo; // 序列标示 private int tag; /** 本次生成的路径 */ private String imagePath; private BitmapManager bitmapManager; public IsharePublishPhoto(Activity activity, photoChangeListener changeListener, photoInfoListener infoListener) { this.changeListener = changeListener; this.infoListener = infoListener; this.activity = activity; view = LayoutInflater.from(activity).inflate( R.layout.ishare_publish_photo_item, null); init(); } /** * 初始化界面 */ private void init() { bitmapManager=new BitmapManager(); initView(); } private void initView() { // 选择层 choose_layer = (LinearLayout) view.findViewById(R.id.choose_layer); // 照片层 photo_layer = (RelativeLayout) view.findViewById(R.id.photo_layer); // 默认层 normal_layer = (ImageView) view.findViewById(R.id.normal_layer); // 选择照片按钮 choose_photo_tv = (TextView) view.findViewById(R.id.choose_photo_tv); choose_photo_tv.setOnClickListener(this); // 从相机拍照 camera_tv = (TextView) view.findViewById(R.id.camera_tv); camera_tv.setOnClickListener(this); // 照片 body_bg = (ImageView) view.findViewById(R.id.body_bg); // 删除按钮 delete_iv = (ImageView) view.findViewById(R.id.delete_iv); delete_iv.setOnClickListener(this); // 编辑按钮 edit_iv = (ImageView) view.findViewById(R.id.edit_iv); edit_iv.setOnClickListener(this); } /** * 设置 * * @param view */ public void onClick(View view) { switch (view.getId()) { case R.id.choose_photo_tv: Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); activity.startActivityForResult(intent, SELECT_PICTURE); break; case R.id.camera_tv: Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); imagePath = BitmapUtil.getImagePath(); Uri uri = Uri.fromFile(new File(imagePath)); intent2.putExtra(MediaStore.EXTRA_OUTPUT, uri); activity.startActivityForResult(intent2, SELECT_CAMER); break; case R.id.delete_iv: // 删除成功则减 changeListener.sub(tag); break; case R.id.edit_iv: // 编辑照片 activity.setContentView(photoInfo.getView()); break; default: break; } } public void setState(int position) { normal_layer.setVisibility(View.GONE); choose_layer.setVisibility(View.GONE); photo_layer.setVisibility(View.GONE); switch (position) { case 0: normal_layer.setVisibility(View.VISIBLE); break; case 1: choose_layer.setVisibility(View.VISIBLE); break; case 2: photo_layer.setVisibility(View.VISIBLE); break; default: break; } } /** * 处理图片的返回数据 */ public String onActivityResult(int requestCode, int resultCode, Intent data) { // 选择照片的返回结果 if (data == null) { if (requestCode == SELECT_CAMER) { filePath = imagePath; // 根据地址,实例化对象 photoInfo = new IsharePublishPhotoInfo(activity, infoListener, filePath, tag); } return filePath; } Object object = null; if (resultCode == Activity.RESULT_OK) { switch (requestCode) { case SELECT_PICTURE: // 相册 Uri uri = data.getData(); String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = activity.managedQuery(uri, proj, null, null, null); int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); filePath = cursor.getString(column_index); break; case SELECT_CAMER: // 相机拍照 if (data.getData() != null) { // 根据返回的URI获取对应的SQLite信息 Cursor cursor2 = activity.getContentResolver().query( data.getData(), null, null, null, null); if (cursor2.moveToFirst()) { filePath = cursor2.getString(cursor2 .getColumnIndex(Media.DATA));// 获取绝对路径 } cursor2.close(); } else {// 三星 小米(小米手机不会自动存储DCIM... 这点让哥又爱又恨...) object = (Bitmap) (data.getExtras() == null ? null : data .getExtras().get("data")); Bitmap bitmap = object == null ? null : (Bitmap) object; if (bitmap != null) { try { filePath = BitmapUtil.saveImg(bitmap, DateFormat .format("yyyyMMddhhmmss", new Date()) .toString()); } catch (Exception e) { e.printStackTrace(); } } } filePath = !filePath.equals("") ? filePath : getRealFilePath(); break; default: break; } } else { Toast.makeText(activity, "请重新选择图片", Toast.LENGTH_SHORT).show(); } // 根据地址,实例化对象 photoInfo = new IsharePublishPhotoInfo(activity, infoListener, filePath, tag); return filePath; } /** * 获取系统默认存储真实文件路径 两个路径 一个是最后一张所拍图片路径 * (由于设置了存储路径所以DCIM中会存储两张一模一样的图片,所以在此获取两张图片路径以便于缩放处理后全部删除) * * @param filePath * @return */ protected String getRealFilePath() { String filePath = ""; // MediaStore.Images.Media.EXTERNAL_CONTENT_URI // content://media/external/images/media Cursor cursor = activity.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, Media.DATE_MODIFIED + " desc"); if (cursor.moveToNext()) { /** * _data:文件的绝对路径 Media.DATA='_data' */ filePath = cursor.getString(cursor.getColumnIndex(Media.DATA)); } return filePath; } /** * 设置回调监听 * * @param listener */ public void setListener(photoChangeListener listener) { this.changeListener = listener; } public void setImage(String url) { bitmapManager.loadBitmap(url, body_bg); } public void setTag(int tag) { this.tag = tag; } /** * 获得本次拍照的保存路径 * * @return */ public String getImagePath() { return imagePath; } public View getView() { return view; } }