package com.andbase.demo.activity; 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 android.widget.ScrollView; import com.andbase.demo.R; import com.andbase.demo.adapter.DragPhotoGridViewAdapter; import com.andbase.demo.global.MyApplication; import com.andbase.demo.model.ImageUploadInfo; import com.andbase.library.app.base.AbBaseActivity; 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.util.AbViewUtil; import com.andbase.library.view.draggrid.AbDragGridView; import com.andbase.library.view.draggrid.AbDragGridViewAdapter; import java.io.File; import java.util.ArrayList; import java.util.Random; public class DragGridViewActivity extends AbBaseActivity { private MyApplication application; /* 用来标识请求照相功能的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; public AbDragGridView dragGridView = null; private DragPhotoGridViewAdapter dragGridViewAdapter = null; private ArrayList<ImageUploadInfo> dragPhotoList = null; private ArrayList<String> photoListString = null; private int maxCount = 18; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_drag_grid_view); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); toolbar.setTitle(R.string.title_drag_grid_view); toolbar.setContentInsetsRelative(0, 0); toolbar.setNavigationIcon(R.drawable.ic_back); toolbar.setNavigationOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); application = (MyApplication) this.getApplication(); dragPhotoList = new ArrayList<ImageUploadInfo>(); photoListString = new ArrayList<String>(); DisplayMetrics dm = AbAppUtil.getDisplayMetrics(this); int width = ((dm.widthPixels-80)/3); //默认 ImageUploadInfo imageUploadInfo = new ImageUploadInfo(String.valueOf(R.drawable.cam_photo)); imageUploadInfo.setCamBtn(true); dragPhotoList.add(imageUploadInfo); dragGridView = (AbDragGridView)findViewById(R.id.drag_grid_view); dragGridViewAdapter = new DragPhotoGridViewAdapter(this,dragGridView,dragPhotoList,width-10,width-10,imageLoader); dragGridView.setAdapter(dragGridViewAdapter); ScrollView scrollView = (ScrollView) findViewById(R.id.scroll_view); dragGridView.setParentScrollView(scrollView); dragGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ImageUploadInfo imageUploadInfo = dragPhotoList.get(position); if(imageUploadInfo.isCamBtn()){ View avatarView = View.inflate(DragGridViewActivity.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 OnClickListener(){ @Override public void onClick(View v) { AbDialogUtil.removeDialog(DragGridViewActivity.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(DragGridViewActivity.this,"没有找到照片"); } } }); camButton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { AbDialogUtil.removeDialog(DragGridViewActivity.this); doPickPhotoAction(); } }); cancelButton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { AbDialogUtil.removeDialog(DragGridViewActivity.this); } }); AbDialogUtil.showDialog(avatarView, Gravity.BOTTOM); }else{ //点击了 其他的 //AbToastUtil.showToast(DragGridViewActivity.this,"2点击了:" + position); photoListString.clear(); for(ImageUploadInfo imageUploadInfo1:dragPhotoList){ if(!imageUploadInfo1.isCamBtn()){ photoListString.add(imageUploadInfo1.getPath()); } } Intent intent = new Intent(DragGridViewActivity.this, ImageViewerActivity.class); intent.putStringArrayListExtra("PATH",photoListString); intent.putExtra("POSITION",position); startActivity(intent); } } }); } /** * 从照相机获取 */ private void doPickPhotoAction() { String status = Environment.getExternalStorageState(); //判断是否有SD卡,如果有sd卡存入sd卡在说,没有sd卡直接转换为图片 if (status.equals(Environment.MEDIA_MOUNTED)) { doTakePhoto(); } else { AbToastUtil.showToast(DragGridViewActivity.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(DragGridViewActivity.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); //限制最大6个 if(dragGridViewAdapter.getCount() == maxCount){ dragGridViewAdapter.setItem(dragGridViewAdapter.containCam(),new ImageUploadInfo(currentFilePath)); }else{ int pos = dragGridViewAdapter.getCount()-1; if(dragGridViewAdapter.containCam()==0){ pos = 0; } dragGridViewAdapter.addItem(pos,new ImageUploadInfo(currentFilePath)); AbViewUtil.setAbsListViewHeight(dragGridView,3,220,10); } break; case CAMERA_WITH_DATA: AbLogUtil.d(this, "从拍照获取的图片的路径是 = " + currentPhotoFile.getPath()); currentFilePath = currentPhotoFile.getPath(); //限制最大6个 if(dragGridViewAdapter.getCount() == maxCount){ dragGridViewAdapter.setItem(dragGridViewAdapter.containCam(),new ImageUploadInfo(currentFilePath)); }else{ dragGridViewAdapter.addItem(dragGridViewAdapter.containCam(),new ImageUploadInfo(currentFilePath)); } 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); } }