zoukankan      html  css  js  c++  java
  • Android 拍照+图片 裁剪 功能的实现

      接到一个小需求,要求实现类似截取头像的图片 裁剪 的功能!时间要求很紧,所以就上看了几个小Demo。虽然原理不难,但是真正好用的没有几个。在一堆烂苹果里找到一个最不烂的。然后又自己修改了一下,达到了预期需求实现!

     

       部局部分:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical" >
     6 
     7     <Button
     8         android:id="@+id/selectImageBtn"
     9         android:layout_width="fill_parent"
    10         android:layout_height="wrap_content"
    11         android:text="选择图片" />
    12 
    13     <ImageView
    14         android:id="@+id/imageView"
    15         android:layout_width="wrap_content"
    16         android:layout_height="wrap_content" />
    17 
    18 </LinearLayout>
    View Code

      

      Activity部分:

      1 import android.app.Activity;
      2 import android.app.AlertDialog;
      3 import android.content.DialogInterface;
      4 import android.content.Intent;
      5 import android.graphics.Bitmap;
      6 import android.graphics.BitmapFactory;
      7 import android.net.Uri;
      8 import android.os.Bundle;
      9 import android.os.Environment;
     10 import android.provider.MediaStore;
     11 import android.view.View;
     12 import android.widget.Button;
     13 import android.widget.ImageView;
     14 
     15 public class DoPhotoActivity extends Activity implements
     16         View.OnClickListener {
     17 
     18     /** Called when the activity is first created. */
     19 
     20     private Button selectImageBtn;
     21 
     22     private ImageView imageView;
     23 
     24     private File sdcardTempFile;
     25 
     26     private AlertDialog dialog;
     27 
     28     private int crop = 128;
     29 
     30     private static final int PHOTO_PICKED_WITH_DATA = 3021;
     31 
     32     private static final int PHOTO_CAMERA_PICKED_WITH_DATA = 3022;
     33 
     34     private static final int CAMERA_WITH_DATA = 3023;
     35 
     36     @Override
     37     public void onCreate(Bundle savedInstanceState) {
     38 
     39         super.onCreate(savedInstanceState);
     40 
     41         setContentView(R.layout.do_photo);
     42 
     43         selectImageBtn = (Button) findViewById(R.id.selectImageBtn);
     44 
     45         imageView = (ImageView) findViewById(R.id.imageView);
     46 
     47         selectImageBtn.setOnClickListener(this);
     48 
     49         sdcardTempFile = new File(Environment.getExternalStorageDirectory()
     50                                 + "/MYIMAGE/" + String.valueOf(System.currentTimeMillis())
     51                                 + ".jpg");
     52     }
     53 
     54     public void ImageScale() {
     55 
     56         Intent intent = new Intent("android.intent.action.PICK");
     57         intent.setDataAndType(MediaStore.Images.Media.INTERNAL_CONTENT_URI,
     58                 "image/*");
     59         intent.putExtra("output", Uri.fromFile(sdcardTempFile));
     60         intent.putExtra("crop", "true");
     61         intent.putExtra("aspectX", 1);// 裁剪框比例
     62         intent.putExtra("aspectY", 1);
     63         intent.putExtra("outputX", crop);// 输出图片大小
     64         intent.putExtra("outputY", crop);
     65         startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
     66     }
     67 
     68     public void photo() {
     69 
     70         Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
     71         startActivityForResult(intent, CAMERA_WITH_DATA);
     72     }
     73 
     74     protected void doCropPhoto(Bitmap data) {
     75 
     76         Intent intent = getCropImageIntent(data);
     77         startActivityForResult(intent, PHOTO_CAMERA_PICKED_WITH_DATA);
     78     }
     79 
     80     public Intent getCropImageIntent(Bitmap data) {
     81         Intent intent = new Intent("com.android.camera.action.CROP");
     82         intent.setType("image/*");
     83         intent.putExtra("data", data);
     84         intent.putExtra("crop", "true");
     85         intent.putExtra("aspectX", 1);
     86         intent.putExtra("aspectY", 1);
     87         intent.putExtra("outputX", crop);
     88         intent.putExtra("outputY", crop);
     89         intent.putExtra("return-data", true);
     90         return intent;
     91     }
     92 
     93     @Override
     94     public void onClick(View v) {
     95 
     96         if (v == selectImageBtn) {
     97 
     98             if (dialog == null) {
     99 
    100                 dialog = new AlertDialog.Builder(this).setItems(
    101                         new String[] { "相机", "相册" },
    102                         new DialogInterface.OnClickListener() {
    103 
    104                             @Override
    105                             public void onClick(DialogInterface dialog,
    106                                     int which) {
    107 
    108                                 if (which == 0) {
    109 
    110                                     photo();
    111 
    112                                 } else {
    113                                     ImageScale();
    114                                 }
    115 
    116                             }
    117 
    118                         }).create();
    119 
    120             }
    121 
    122             if (!dialog.isShowing()) {
    123 
    124                 dialog.show();
    125 
    126             }
    127 
    128         }
    129 
    130     }
    131 
    132     @Override
    133     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    134 
    135         if (resultCode == RESULT_OK) {
    136 
    137             switch (requestCode) {
    138 
    139             case CAMERA_WITH_DATA:
    140 
    141                 Bitmap camera_photo = data.getParcelableExtra("data");
    142                 doCropPhoto(camera_photo);
    143                 
    144 
    145             case PHOTO_PICKED_WITH_DATA:
    146 
    147                 Bitmap picked_photo = BitmapFactory.decodeFile(sdcardTempFile.getAbsolutePath());
    148                 imageView.setImageBitmap(picked_photo);
    149                 break;
    150 
    151             case PHOTO_CAMERA_PICKED_WITH_DATA:
    152 
    153                 Bitmap camera_picked_photo = data.getParcelableExtra("data");
    154                 imageView.setImageBitmap(camera_picked_photo);
    155                 break;
    156 
    157             }
    158 
    159         }
    160 
    161     }
    162 }
    View Code

     

  • 相关阅读:
    个人总结
    第三次个人作业
    第二次结对作业
    第一次结对作业
    第二次个人编程作业
    第一次博客编程作业
    第一次随笔作业
    BUAA_2020_软件工程_提问回顾与总结
    BUAA_2020_软件工程_软件案例分析作业
    BUAA_2020_软件工程_结对项目作业
  • 原文地址:https://www.cnblogs.com/king4220550/p/3757372.html
Copyright © 2011-2022 走看看