选择系统相册或拍照显示图片到ImageView

来源:互联网 发布:Mac玩钢铁雄心4 编辑:程序博客网 时间:2024/06/05 04:48

典型的应用场景就是上传头像~

下面是代码,不赘述,注释详细:

package com.example.lenovo.demo;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.widget.ImageView;import android.widget.Toast;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.text.SimpleDateFormat;import java.util.Date;public class MainActivity extends Activity {    private ImageView mImageView;    //拍照时的图片存储路径    private static final String iconPath = Environment.getExternalStorageDirectory()+"/Image";//图片的存储目录    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mImageView = (ImageView) findViewById(R.id.mImageView);    }    /**     * 打开系统相册,并选择图片     */    public void selectPic(View view){        Intent intent = new Intent("android.intent.action.PICK");        intent.setType("image/*");        startActivityForResult(intent, 0);    }    /**     * 选择拍照的图片     */    public void takePhoto(View view){        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");        startActivityForResult(intent, 1);    }    /**     * 给拍的照片命名     */    public String createPhotoName(){        //以系统的当前时间给图片命名        Date date = new Date(System.currentTimeMillis());        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");        String fileName = format.format(date)+".jpg";        return fileName;    }    /**     * 把拍的照片保存到SD卡     */    public void saveToSDCard(Bitmap bitmap) {        //先要判断SD卡是否存在并且挂载        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {            File file = new File(iconPath);            if (!file.exists()) {                file.mkdirs();            }            FileOutputStream outputStream = null;            try {                outputStream = new FileOutputStream(createPhotoName());                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);//把图片数据写入文件            } catch (FileNotFoundException e) {                e.printStackTrace();            }finally {                if(outputStream!=null){                    try {                        outputStream.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }        }else {            Toast.makeText(this,"SD卡不存在",Toast.LENGTH_SHORT).show();        }    }    /**     * 获取选择的图片     */    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        if(data==null){            return;//当data为空的时候,不做任何处理        }        Bitmap bitmap = null;        if(requestCode==0){            //获取从相册界面返回的缩略图            bitmap = data.getParcelableExtra("data");            if(bitmap==null){//如果返回的图片不够大,就不会执行缩略图的代码,因此需要判断是否为null,如果是小图,直接显示原图即可                try {                    //通过URI得到输入流                    InputStream inputStream = getContentResolver().openInputStream(data.getData());                    //通过输入流得到bitmap对象                    bitmap = BitmapFactory.decodeStream(inputStream);                } catch (FileNotFoundException e) {                    e.printStackTrace();                }            }        }else if(requestCode==1){            bitmap = (Bitmap) data.getExtras().get("data");            saveToSDCard(bitmap);        }        //将选择的图片设置到控件上        mImageView.setImageBitmap(bitmap);    }}

最后,别忘了,清单文件 权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.CAMERA"/>
0 0
原创粉丝点击