package com.test.xp.camera; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.provider.MediaStore; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class MainActivity extends AppCompatActivity { private RelativeLayout rl; private ImageView iv; private File imgFile; private final String IMAGE_FILE_NAME = "faceImage.jpg"; String[] items = new String[]{"选择本地图片", "拍照"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rl=(RelativeLayout)findViewById(R.id.rl); iv=(ImageView)findViewById(R.id.iv); init(); imgFile=getImgPath(); } //获取文件 private File getImgPath() { File cacheFileDir; if (Environment.MEDIA_MOUNTED.equals(Environment .getExternalStorageState()) || !Environment.isExternalStorageRemovable()) { cacheFileDir = Environment.getExternalStorageDirectory(); } else { cacheFileDir = getApplicationContext().getCacheDir(); } if (null != cacheFileDir && !cacheFileDir.exists()) { cacheFileDir.mkdirs(); } File cacheFile = App.getFile(cacheFileDir.getAbsolutePath() + File.separator + "cyol" + File.separator + IMAGE_FILE_NAME); return cacheFile; } private void init() { rl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new AlertDialog.Builder(MainActivity.this).setTitle("设置头像").setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which){ case 0://相册中选取 Intent intentFromGallery=new Intent(); intentFromGallery.setType("image/*"); intentFromGallery.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intentFromGallery,450); break; case 1://拍照 Intent intentFromCapture = new Intent( MediaStore.ACTION_IMAGE_CAPTURE); intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imgFile)); startActivityForResult(intentFromCapture, 451); break; } } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).show(); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ case 450://相册 if (null!=data){ startPhotoZoom(data.getData()); } break; case 451://拍照 startPhotoZoom(); break; case 452://裁剪后的返回 if (data != null) { Bundle extras = data.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); Log.e("111111",photo.toString()); uploadPhoto(photo); } else { } } break; } super.onActivityResult(requestCode, resultCode, data); } private void uploadPhoto(Bitmap photo) { try { photo.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream( imgFile)); } catch (FileNotFoundException e) { e.printStackTrace(); } iv.setImageBitmap(photo); } //开始裁剪图片 private void startPhotoZoom(){ Uri uri=Uri.fromFile(imgFile); startPhotoZoom(uri); } //裁剪图片 private void startPhotoZoom(Uri data) { if (null==data){ return; } Intent intent=new Intent("com.android.camera.action.CROP"); intent.setDataAndType(data,"image/*"); //设置裁剪 intent.putExtra("crop","true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 320); intent.putExtra("outputY", 320); intent.putExtra("return-data", true); startActivityForResult(intent, 452); // } }
public class App extends Application { @Override public void onCreate() { super.onCreate(); } public static File getFile(String path){ int fp=path.lastIndexOf(File.separator); String sfp=path.substring(0, fp); File fpath=new File(sfp); if(!fpath.exists()&&!fpath.isDirectory()){ fpath.mkdirs(); } File f=new File(path); if(!f.exists()){ try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } return f; } }
main_activity.xml的布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.test.xp.camera.MainActivity"> <RelativeLayout android:gravity="center_horizontal" android:id="@+id/rl" android:layout_width="368dp" android:layout_height="wrap_content"> <ImageView android:id="@+id/iv" android:src="@mipmap/ic_launcher" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> </LinearLayout>