您的位置:首页 > 移动开发 > Android开发

Android 手机相册图片选择

2015-09-18 18:16 543 查看
转载请注明本文出自Jiaxu的专栏(http://blog.csdn.net/u011510784/article/details/48550037),谢谢!

项目开发中经常遇到选择照片或者拍照并上传到服务器上的情况,本文主要介绍手机中图片的选择及显示,废话不多,有图有真相:


  

  



  

  


 为提高可移植性,在主函数中的代码很简单,只需要初始化GridView即可,MainActivity中:

package com.example.tackphoto;

import android.content.Context;
import android.os.Bundle;

import com.example.showphoto.GridViewForListView;
import com.example.showphoto.WriteActivity;

public class MainActivity extends WriteActivity {
private Context context;
private GridViewForListView mGridView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
mGridView = (GridViewForListView) findViewById(R.id.gridView1);
setGridViewForListView(context, mGridView);
}
}




接下来看一下WriteActivity中的setGridViewForListView方法.这里面主要处理图片在GridView上的显示以及GridView的点击事件

public void setGridViewForListView(Context context,
GridViewForListView mGridView) {
this.mGridView = mGridView;
this.context = context;
dataForGV = new ArrayList<Bitmap>();
listfile = new ArrayList<String>();
getImageBitmap();
}
可以看到,进来后会执行getImageBitmap()方法,在这个方法中会初始化一张添加图片,点击此图片可以进行添加图片操作,在这里面也初始化了GridView的适配器以及点击事件:

if (adapter == null && dataForGV != null) {
adapter = new AddPhotoGrideViewAdapter(context, listfile);
mGridView.setAdapter(adapter);
addPhotoGrideViewOnItemClickListener = new AddPhotoGrideViewOnItemClickListener(
context, this, adapter, listfile, SELECTPHOTO, TAKE_PICTURE);
mGridView
.setOnItemClickListener(addPhotoGrideViewOnItemClickListener);
}


先看一下点击监听事件AddPhotoGrideViewOnItemClickListener.class

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
if (adapter != null) {
if ((adapter.getCount() - 1) == position) {
if (listfile.size() >= 6) {
Toast.makeText(context, "最多只能添加六张照片!", Toast.LENGTH_LONG)
.show();
} else {
showmySelectDialog("拍照", "从相册选择");
}
} else {
dialog(position);
}
}
}


如果点的是最后一张,即加号图片,如果添加的图片没有到六张,那么弹出添加图片的dialog;若点击的不是最后一张,那么弹出删除此图片的dialog.

继续看一下选择图片:

@Override
public void onClick(View v) {
Intent intent = null;
switch (v.getId()) {
case R.id.tv_one:
outputFileUri = getOutputFileUri();
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
activity.startActivityForResult(intent, takePhotoRequest);
break;
case R.id.tv_three:
intent = new Intent();
intent.setClass(context, ImgFileListActivity.class);
// intent.putExtra("isSingled", false);
activity.startActivityForResult(intent, addPhotoRequest);
break;
case R.id.tv_cancel:
dismissSelectDialog();
break;
}
}


tv_one表示点击的是拍照,调用系统照相机拍照,tv_three表示选择手机中的图片,跳入ImgFileListActivity.在这个Activity中用listview的方式显示手机中所有的存放图片文件夹,这段代码在Util类中:

/**
* 获取全部图片地址
*
* @return
*/
public ArrayList<String> listAlldir() {
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Uri uri = intent.getData();
ArrayList<String> list = new ArrayList<String>();
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(uri, proj, null,
null, null);// managedQuery(uri, proj, null, null, null);
while (cursor.moveToNext()) {
String path = cursor.getString(0);
list.add(new File(path).getAbsolutePath());
}
return list;
}


点击listview进入ImgsActivity,查看相应文件里的图片,这里使用GridView显示图片,点击GridView记录选择的图片,点击保存按钮,通过setResult()方法将选择的图片的路径返回到上级Activity,并最终返回到WriteActivity里,在Mainactivity中可以通过以下代码获取选择的图片的路径:

private List<String> getSelectedImgPath() {
List<String> imgsPath = getImgPath();
return imgsPath;
}
   

   项目源码>>>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息