Android 手机相册图片选择
2015-09-18 18:16
543 查看
转载请注明本文出自Jiaxu的专栏(http://blog.csdn.net/u011510784/article/details/48550037),谢谢!
项目开发中经常遇到选择照片或者拍照并上传到服务器上的情况,本文主要介绍手机中图片的选择及显示,废话不多,有图有真相:
![](https://img-blog.csdn.net/20150918180142549?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20150918180305289?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20150918180324509?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20150918180345272?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20150918180401097?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20150918180416686?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
为提高可移植性,在主函数中的代码很简单,只需要初始化GridView即可,MainActivity中:
接下来看一下WriteActivity中的setGridViewForListView方法.这里面主要处理图片在GridView上的显示以及GridView的点击事件
先看一下点击监听事件AddPhotoGrideViewOnItemClickListener.class
如果点的是最后一张,即加号图片,如果添加的图片没有到六张,那么弹出添加图片的dialog;若点击的不是最后一张,那么弹出删除此图片的dialog.
继续看一下选择图片:
tv_one表示点击的是拍照,调用系统照相机拍照,tv_three表示选择手机中的图片,跳入ImgFileListActivity.在这个Activity中用listview的方式显示手机中所有的存放图片文件夹,这段代码在Util类中:
点击listview进入ImgsActivity,查看相应文件里的图片,这里使用GridView显示图片,点击GridView记录选择的图片,点击保存按钮,通过setResult()方法将选择的图片的路径返回到上级Activity,并最终返回到WriteActivity里,在Mainactivity中可以通过以下代码获取选择的图片的路径:
项目源码>>>
项目开发中经常遇到选择照片或者拍照并上传到服务器上的情况,本文主要介绍手机中图片的选择及显示,废话不多,有图有真相:
为提高可移植性,在主函数中的代码很简单,只需要初始化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; }
项目源码>>>
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories