package com.partynetwork.iparty.iparty; import java.io.File; import java.util.ArrayList; import java.util.Date; import java.util.List; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.provider.MediaStore.Images.Media; import android.text.format.DateFormat; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.partynetwork.dataprovider.json.struct.Iparty_releaseIpartyRequest; import com.partynetwork.dataprovider.util.BitmapUtil; import com.partynetwork.iparty.R; import com.partynetwork.iparty.app.common.BitmapManager; import com.partynetwork.myview.mytoast.MenuBottomPop; import com.partynetwork.myview.mytoast.OkPopup; import com.baidu.mobstat.StatService; import com.lidroid.xutils.ViewUtils; import com.lidroid.xutils.view.annotation.ViewInject; import com.lidroid.xutils.view.annotation.event.OnClick; public class IpartyPublishTwoActivity extends Activity { private static final int SELECT_PICTURE = 100; private static final int SELECT_CAMER = 101; /** * 初始上传海报图片 */ @ViewInject(R.id.choose_photo_rl) private RelativeLayout choosePhoto; /** * 用来显示图片的布局 */ @ViewInject(R.id.choose_photo_content) private LinearLayout photoContent; /** * 照片数量 */ @ViewInject(R.id.photo_number) private TextView photoNumber; /** * 放照片的存放布局 */ @ViewInject(R.id.choose_photo_body) private LinearLayout chooseBody; /** 底部弹出窗 */ private MenuBottomPop menuBottonPop; private String[] menuStr = new String[] { "拍照", "从手机相册选择" }; /** * 存放选择的照片布局的list */ private List<RelativeLayout> choosePhotoList = new ArrayList<RelativeLayout>(); /** * 照片的列表 */ private List<String> photoList = new ArrayList<String>(); /** * 请求对象 */ private Iparty_releaseIpartyRequest request; /** 消息提示框 */ private OkPopup mOkPopup; /** 本次生成的图片存放路径 */ private String imagePath; private BitmapManager bitmapManager; /** * * 覆盖方法 * * @see android.app.Activity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.iparty_publish_two); ViewUtils.inject(this); init(); } /** * 初始化数据、控件 */ private void init() { bitmapManager=new BitmapManager(); request = getIntent().getParcelableExtra( IpartyPublishOneActivity.REQUEST); mOkPopup = new OkPopup(this); } /** * 设置监听 * * @param view */ @OnClick({ R.id.menu_head_left, R.id.choose_photo_rl, R.id.iparty_publish_next }) public void onClick(View view) { switch (view.getId()) { case R.id.menu_head_left: // 返回 finish(); break; case R.id.iparty_publish_next: // 下一步 int size = photoList.size(); if (size > 0) { Intent intent = new Intent(this, IpartyPublishThreeActivity.class); request.setEventPosterArray((String[]) photoList .toArray(new String[size])); intent.putExtra(IpartyPublishOneActivity.REQUEST, request); startActivity(intent); } else { mOkPopup.setTitle("海报都没有还想发布派对?"); mOkPopup.showAtLocation(choosePhoto); } break; case R.id.choose_photo_rl: // 选择照片 showPopMenu(menuStr, menuClick); break; default: break; } } private OnClickListener menuClick = new OnClickListener() { public void onClick(View v) { menuBottonPop.dismiss(); if (v.getTag().equals(menuStr[0])) { // 相机拍照 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); imagePath = BitmapUtil.getImagePath(); Uri uri = Uri.fromFile(new File(imagePath)); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); IpartyPublishTwoActivity.this.startActivityForResult(intent, SELECT_CAMER); } else if (v.getTag().equals(menuStr[1])) { // 相册选取 Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); IpartyPublishTwoActivity.this.startActivityForResult(intent, SELECT_PICTURE); } } }; /** * 显示底部菜单 */ private void showPopMenu(String[] str, OnClickListener menuClick) { menuBottonPop = new MenuBottomPop(this, str, menuClick); menuBottonPop.showAtLocation(choosePhoto); } /** * 覆盖方法 * * @see android.app.Activity#onActivityResult(int, int, * android.content.Intent) */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); String filePath = ""; Object object = null; // 选择照片的返回结果 if (data == null) { if (requestCode == SELECT_CAMER) { filePath = imagePath; if (filePath != "") { choosePhoto.setVisibility(View.GONE); photoContent.setVisibility(View.VISIBLE); addPhoto(filePath); } } return; } if (resultCode == Activity.RESULT_OK) { switch (requestCode) { case SELECT_PICTURE: // 相册 try { Uri uri = data.getData(); String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = this.managedQuery(uri, proj, null, null, null); int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); filePath = cursor.getString(column_index); } catch (Exception e) { e.printStackTrace(); } break; case SELECT_CAMER: // 相机 // 相机拍照 if (data.getData() != null) { // 根据返回的URI获取对应的SQLite信息 Cursor cursor = this.getContentResolver().query( data.getData(), null, null, null, null); if (cursor.moveToFirst()) { filePath = cursor.getString(cursor .getColumnIndex(Media.DATA));// 获取绝对路径 } cursor.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("yyyy-MM-dd-hh-mm-ss", new Date()) .toString()); } catch (Exception e) { e.printStackTrace(); } } } filePath = !filePath.equals("") ? filePath : getRealFilePath(); break; default: break; } if (filePath != "") { choosePhoto.setVisibility(View.GONE); photoContent.setVisibility(View.VISIBLE); addPhoto(filePath); } } else { Toast.makeText(this, "请重新选择图片", Toast.LENGTH_SHORT).show(); } } /** * 获取系统默认存储真实文件路径 两个路径 一个是最后一张所拍图片路径 * (由于设置了存储路径所以DCIM中会存储两张一模一样的图片,所以在此获取两张图片路径以便于缩放处理后全部删除) * * @param filePath * @return */ protected String getRealFilePath() { String filePath = ""; // MediaStore.Images.Media.EXTERNAL_CONTENT_URI // content://media/external/images/media Cursor cursor = this.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 filePath */ private void addPhoto(final String filePath) { final RelativeLayout layout = new RelativeLayout(this); ImageView iv = new ImageView(this); bitmapManager.loadBitmap(filePath, iv); RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT); iv.setScaleType(ScaleType.CENTER_CROP); layout.addView(iv, params2); ImageView close = new ImageView(this); close.setImageResource(R.drawable.iparty_publish_delete); RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); params1.leftMargin = 5; params1.topMargin = 5; close.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { choosePhotoList.remove(layout); photoList.remove(filePath); showPhotoList(); } }); layout.addView(close, params1); photoList.add(filePath); choosePhotoList.add(layout); showPhotoList(); } /** * 显示选中列表的图片 */ private void showPhotoList() { LayoutParams param = new LayoutParams(120, LayoutParams.FILL_PARENT); param.rightMargin = 10; chooseBody.removeAllViews(); int size = choosePhotoList.size(); if (size == 0) { choosePhoto.setVisibility(View.VISIBLE); photoContent.setVisibility(View.GONE); } photoNumber.setText(size + "张照片"); for (int i = 0; i < size; i++) { chooseBody.addView(choosePhotoList.get(i), param); } addChoosePhoto(); } /** * 添加最后的选择图片控件 */ private void addChoosePhoto() { RelativeLayout layout = new RelativeLayout(this); layout.setGravity(Gravity.CENTER); layout.setBackgroundColor(Color.parseColor("#EF6565")); ImageView iv = new ImageView(this); iv.setId(1); iv.setImageResource(R.drawable.iparty_publish_add_photo_icon); RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); params1.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); layout.addView(iv, params1); TextView tv = new TextView(this); RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); params2.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); params2.addRule(RelativeLayout.BELOW, 1); tv.setText("添加照片"); tv.setTextColor(Color.WHITE); tv.setTextSize(12); layout.addView(tv, params2); layout.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { showPopMenu(menuStr, menuClick); } }); LayoutParams param = new LayoutParams(120, LayoutParams.FILL_PARENT); param.rightMargin = 10; chooseBody.addView(layout, param); } @Override protected void onResume() { StatService.onResume(this); super.onResume(); } @Override protected void onPause() { StatService.onPause(this); super.onPause(); } }