package com.andbase.demo.activity; import java.io.File; import java.util.ArrayList; import java.util.Random; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.v4.content.CursorLoader; import android.support.v7.widget.Toolbar; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.Button; import com.andbase.demo.R; import com.andbase.demo.adapter.ImageUploadAdapter; import com.andbase.demo.global.MyApplication; import com.andbase.demo.model.ImageUploadInfo; import com.andbase.library.app.base.AbBaseActivity; import com.andbase.library.image.AbImageLoader; import com.andbase.library.util.AbAppUtil; import com.andbase.library.util.AbDialogUtil; import com.andbase.library.util.AbFileUtil; import com.andbase.library.util.AbLogUtil; import com.andbase.library.util.AbStrUtil; import com.andbase.library.util.AbToastUtil; import com.andbase.library.view.sample.AbSampleGridView; public class AddPhotoActivity extends AbBaseActivity { private MyApplication application; private AbSampleGridView girdView = null; private ImageUploadAdapter imageListAdapter = null; private ArrayList<ImageUploadInfo> photoList = null; private ArrayList<String> photoListString = null; private ArrayList<String> photoServerList = null; /* 用来标识请求照相功能的activity */ private static final int CAMERA_WITH_DATA = 3023; /* 用来标识请求gallery的activity */ private static final int PHOTO_PICKED_WITH_DATA = 3021; /* 用来标识请求裁剪图片后的activity */ private static final int CAMERA_CROP_DATA = 3022; // 照相机拍照得到的图片 private File currentPhotoFile; private String fileName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_photo); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); toolbar.setTitle(R.string.title_add_photo); toolbar.setContentInsetsRelative(0, 0); toolbar.setNavigationIcon(R.drawable.ic_back); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); application = (MyApplication) this.getApplication(); photoList = new ArrayList<ImageUploadInfo>(); photoServerList = new ArrayList<String>(); photoListString = new ArrayList<String>(); //默认 photoList.add(new ImageUploadInfo(String.valueOf(R.drawable.cam_photo))); DisplayMetrics dm = AbAppUtil.getDisplayMetrics(this); int width = ((dm.widthPixels-80)/3); girdView = (AbSampleGridView)findViewById(R.id.grid_view); girdView.setPadding(10,10); girdView.setColumn(3); imageListAdapter = new ImageUploadAdapter(this, photoList,width,width,imageLoader); girdView.setAdapter(imageListAdapter); Button addBtn = (Button)findViewById(R.id.addBtn); girdView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if(position >= photoList.size()-1){ View avatarView = View.inflate(AddPhotoActivity.this,R.layout.view_choose_avatar,null); Button albumButton = (Button)avatarView.findViewById(R.id.choose_album); Button camButton = (Button)avatarView.findViewById(R.id.choose_cam); Button cancelButton = (Button)avatarView.findViewById(R.id.choose_cancel); albumButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { AbDialogUtil.removeDialog(AddPhotoActivity.this); // 从相册中去获取 try { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); intent.setType("image/*"); startActivityForResult(intent, PHOTO_PICKED_WITH_DATA); } catch (Exception e) { AbToastUtil.showToast(AddPhotoActivity.this,"没有找到照片"); } } }); camButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { AbDialogUtil.removeDialog(AddPhotoActivity.this); doPickPhotoAction(); } }); cancelButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { AbDialogUtil.removeDialog(AddPhotoActivity.this); } }); AbDialogUtil.showDialog(avatarView, Gravity.BOTTOM); }else{ //点击了 其他的 //AbToastUtil.showToast(AddPhotoActivity.this,"1点击了:" + position); Intent intent = new Intent(AddPhotoActivity.this, ImageViewerActivity.class); intent.putStringArrayListExtra("PATH",photoListString); intent.putExtra("POSITION",position); startActivity(intent); } } }); addBtn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { uploadFile(); } }); } /** * 从照相机获取 */ private void doPickPhotoAction() { String status = Environment.getExternalStorageState(); //判断是否有SD卡,如果有sd卡存入sd卡在说,没有sd卡直接转换为图片 if (status.equals(Environment.MEDIA_MOUNTED)) { doTakePhoto(); } else { AbToastUtil.showToast(AddPhotoActivity.this,"没有可用的存储卡"); } } /** * 拍照获取图片 */ protected void doTakePhoto() { try { fileName = "camera_"+new Random().nextInt(1000) + "-" + System.currentTimeMillis() + ".png"; String photo_dir = AbFileUtil.getImageDownloadDir(this); currentPhotoFile = new File(photo_dir, fileName); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(currentPhotoFile)); startActivityForResult(intent, CAMERA_WITH_DATA); } catch (Exception e) { AbToastUtil.showToast(AddPhotoActivity.this,"未找到系统相机程序"); } } /** * 因为调用了Camera和Gally所以要判断他们各自的返回情况, * 他们启动时是这样的startActivityForResult */ public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (resultCode != RESULT_OK){ return; } String currentFilePath = null; switch (requestCode) { case PHOTO_PICKED_WITH_DATA: Uri uri = intent.getData(); currentFilePath = getPath(uri); AbLogUtil.d(this, "从相册获取的图片的路径是 = " + currentFilePath); photoListString.add(currentFilePath); imageListAdapter.addItem(imageListAdapter.getCount()-1,new ImageUploadInfo(currentFilePath)); /*if(!AbStrUtil.isEmpty(currentFilePath)){ Intent intent1 = new Intent(activity, CropImageActivity.class); intent1.putExtra("PATH", currentFilePath); startActivityForResult(intent1, CAMERA_CROP_DATA); }else{ AbToastUtil.showToast(activity,"未在存储卡中找到这个文件"); }*/ break; case CAMERA_WITH_DATA: AbLogUtil.d(this, "从拍照获取的图片的路径是 = " + currentPhotoFile.getPath()); currentFilePath = currentPhotoFile.getPath(); photoListString.add(currentFilePath); imageListAdapter.addItem(imageListAdapter.getCount()-1,new ImageUploadInfo(currentFilePath)); /*if(!AbStrUtil.isEmpty(currentFilePath)){ Intent intent2 = new Intent(activity, CropImageActivity.class); intent2.putExtra("PATH",currentFilePath); startActivityForResult(intent2,CAMERA_CROP_DATA); }else{ AbToastUtil.showToast(activity,"未在存储卡中找到这个文件"); }*/ break; case CAMERA_CROP_DATA: String path = intent.getStringExtra("PATH"); AbLogUtil.e(this, "裁剪后得到的图片的路径是 = " + path); imageListAdapter.addItem(imageListAdapter.getCount()-1,new ImageUploadInfo(path)); break; } } /** * 从相册得到的url转换为SD卡中图片路径 */ public String getPath(Uri uri) { if(AbStrUtil.isEmpty(uri.getAuthority())){ return null; } String[] proj = { MediaStore.Images.Media.DATA }; CursorLoader loader = new CursorLoader(this, uri, proj, null, null, null); Cursor cursor = loader.loadInBackground(); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } public void uploadFile(){ // } }