Android调用系统相机,相册裁切图片展示的实现

效果图:

Android调用系统相机,相册裁切图片展示的实现_第1张图片

MainActivity

package com.example.administrator.rxxjava;

import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    public Bitmap bitmap;
    private File file;

    private ImageView image;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        image = (ImageView) findViewById(R.id.pick_iv);
        String path=AppTools.getImageSavePath(this)+"/abc.jpg";
        file=new File(path);
    }


    public void onClick(View view) {
        Intent intent=null;
        switch (view.getId()){

            case R.id.camera_bt:
                intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                // 相机拍照后的照片存储的路径
                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
                startActivityForResult(intent, 102);
                break;

            //打开相册:
            case R.id.gallery_bt:
                intent=new Intent(Intent.ACTION_PICK,null);
                intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
                startActivityForResult(intent,100);
                break;
        }

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==RESULT_OK){
            switch (requestCode){
                case 100:

                    if(data!=null){
                        Uri uri = data.getData();
                        if(uri!=null){
                            //系统裁切图片
                            cutImage(uri);
                        }
                    }
                    break;

                case 101:

                    Bundle extras = data.getExtras();
                    bitmap= extras.getParcelable("data");
                    try {
                        //压缩图片
                        FileOutputStream fos=new FileOutputStream(file);
                        bitmap.compress(Bitmap.CompressFormat.JPEG,100,fos);
                        fos.close();
                        //设置给imageview,展示位圆形图片,大家也可不用转换,根据需求
                        image.setImageBitmap(AppTools.toRoundBitmap(bitmap));

                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }


                    break;

                case 102:
                    cutImage(Uri.fromFile(file));

                    break;


            }
        }
    }

    private void cutImage(Uri uri) {
        Intent intent=new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri,"image/*");
        // 下面这个crop=true表示VIEW可裁剪
        intent.putExtra("crop", "true");
        // aspectX aspectY 是宽高的比例
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // outputX outputY 是裁剪图片宽高
        intent.putExtra("outputX", 200);
        intent.putExtra("outputY", 200);
        //必须将数据返回,因为我们还要展示ui
        intent.putExtra("return-data", true);
        startActivityForResult(intent, 101);
    }
}

布局:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.example.administrator.rxxjava.MainActivity">


    <ImageView
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:id="@+id/pick_iv"
        android:layout_gravity="center"
        android:src="@mipmap/ic_launcher"
        />
    <Button
        android:text="相机裁切"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/camera_bt"
        android:onClick="onClick" />

    <Button
        android:text="相册裁切"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/camera_bt"
        android:layout_alignRight="@+id/camera_bt"
        android:layout_alignEnd="@+id/camera_bt"
        android:layout_marginTop="40dp"
        android:id="@+id/gallery_bt"
        android:onClick="onClick"/>
LinearLayout>

权限不要忘了

<uses-permission android:name="android.permission.CAMERA">uses-permission>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">uses-permission>

你可能感兴趣的:(Android开发中的点滴记录)