Android开发之 选择相册图片或者拍照
来源:互联网 发布:sql loop循环 编辑:程序博客网 时间:2024/05/17 03:24
在我们的Android开发中肯定都会遇到要选择本地相册的图片或者是用相机进行拍照使用图片。
简单的讲解一下如何使用,比如我们要上传头像时总会使用的。这个步骤一般就是:1.点击头像然后会弹出一个菜单,然后我们选择是从相册中选择图片还是使用相机拍照;2.选择照片或者拍照以后保存后照片的Id。基本就是这个样子比较简单的功能
public class MainActivity extends Activity { private static final int PHOTO_REQUEST_CAMERA = 1;// 拍照 private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择 private static final int PHOTO_REQUEST_CUT = 3;// 结果 private ImageView mFace; private Bitmap bitmap; /* 头像名称 */ private static final String PHOTO_FILE_NAME = "temp_photo.jpg"; private File tempFile; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.mFace = (ImageView) this.findViewById(R.id.iv_image); } /* * 从相册获取 */ public void gallery(View view) { // 激活系统图库,选择一张图片 Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); this.startActivityForResult(intent, PHOTO_REQUEST_GALLERY); } /* * 从相机获取 */ public void camera(View view) { Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); // 判断存储卡是否可以用,可用进行存储 if (hasSdcard()) { intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment .getExternalStorageDirectory(), PHOTO_FILE_NAME))); } this.startActivityForResult(intent, PHOTO_REQUEST_CAMERA); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PHOTO_REQUEST_GALLERY) { if (data != null) { // 得到图片的全路径 Uri uri = data.getData(); crop(uri); } } else if (requestCode == PHOTO_REQUEST_CAMERA) { if (hasSdcard()) { tempFile = new File(Environment.getExternalStorageDirectory(), PHOTO_FILE_NAME); crop(Uri.fromFile(tempFile)); } else { Toast.makeText(MainActivity.this, "未找到存储卡,无法存储照片!", 0).show(); } } else if (requestCode == PHOTO_REQUEST_CUT) { try { bitmap = data.getParcelableExtra("data"); this.mFace.setImageBitmap(bitmap); boolean delete = tempFile.delete(); System.out.println("delete = " + delete); } catch (Exception e) { e.printStackTrace(); } } super.onActivityResult(requestCode, resultCode, data); } /** * 剪切图片 * * @function: * @author:Jerry * @date:2013-12-30 * @param uri */ private void crop(Uri uri) { // 裁剪图片意图 Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); // 裁剪框的比例,1:1 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // 裁剪后输出图片的尺寸大小 intent.putExtra("outputX", 250); intent.putExtra("outputY", 250); // 图片格式 intent.putExtra("outputFormat", "JPEG"); intent.putExtra("noFaceDetection", true);// 取消人脸识别 intent.putExtra("return-data", true);// true:不返回uri,false:返回uri startActivityForResult(intent, PHOTO_REQUEST_CUT); } //判断是否有Sd card private boolean hasSdcard() { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { return true; } else { return false; } }
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="gallery" android:text="获取图库图片" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="camera" android:text="拍照获取图片" /> <ImageView android:id="@+id/iv_image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:onClick="upload" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上传" /></LinearLayout>
1 0
- Android开发之 选择相册图片或者拍照
- Android开发之头像上传(包含拍照,从相册选择图片,裁剪等)
- android 选择图片 相册选择 马上拍照
- Android 选择图片 相册选择 马上拍照
- Android 从相册和拍照选择图片
- Android 拍照/相册 选择图片工具
- android 拍照和选择相册图片剪切
- Android 拍照、从相册选择图片
- HTML5 Plus 拍照或者相册选择图片上传
- HTML5 Plus 拍照或者相册选择图片上传
- 拍照或者从相册选择
- Android开发,调用相册图片或者调用相机进行拍照获取图片
- Android开发——相册拍照_02.将拍照得到或相册中选择的图片显示在ImageView中
- Android 实现从相册选择图片,拍照选择图片
- Android拍照、相册选择
- android:通过选择相册或者拍照获取照片
- Android上传图片之调用系统拍照和从相册选择图片
- Android上传图片之调用系统拍照和从相册选择图片
- windos下配置 sublime text+quick3.5 开发环境
- python定时杀进程
- C#中制作启动窗体的方法和问题
- 用AOPR试用版能破解几位密码
- struct和typedef struct
- Android开发之 选择相册图片或者拍照
- iOS开发中可能会用到的一些函数。。。
- AFNetworking3.0网络请求
- maven使用别人写好的jar
- java泛型(一)、泛型的基本介绍和使用
- 视频相关概念
- 山东多校联合模拟赛 Day1第一题
- Incompatible integer to pointer conversion assigning to 'NSInteger *' (aka 'long *') from 'int'
- LuaJavaBridge - Lua 与 Java 互操作的简单解决方案(对于QUICK-COCOS开发者是很好的文章)