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;
}
}