close

 

 

按下按鈕後先調用相簿,選取照片後會再叫出裁剪頁面

 

MainActivity.java

package com.example.user.openimage;

import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {
    private LinearLayout LL;
    private ImageView imageView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化
        LL=(LinearLayout)this.findViewById(R.id.LL);
        imageView = (ImageView) findViewById(R.id.iv01);
        Button button = (Button)findViewById(R.id.b01);

        //擷取照片按鈕監聽器
        button.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View v) {
                //讀取圖片
                Intent intent = new Intent();
                //開啟Pictures畫面Type設定為image
                intent.setType("image/*");
                //使用Intent.ACTION_GET_CONTENT這個Action
                intent.setAction(Intent.ACTION_GET_CONTENT);
                //取得照片後返回此畫面
                startActivityForResult(intent, 0);
            }

        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case 0:  //取得圖片後進行裁剪
                    Uri uri = data.getData();
                    if(uri!=null){
                        doCropPhoto(uri);
                    }
                    break;
                case 1:  //裁剪完的圖片更新到ImageView
                    //先釋放ImageView上的圖片
                    if(imageView.getDrawable()!=null) {
                        imageView.setImageBitmap(null);
                        System.gc();
                    }
                    //更新ImageView
                    Bitmap bitmap = data.getParcelableExtra("data");
                    imageView.setImageBitmap(bitmap);
                    break;
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    protected void doCropPhoto(Uri uri){
        //進行照片裁剪
        Intent intent = getCropImageIntent(uri);
        startActivityForResult(intent, 1);
    }

    //裁剪圖片的Intent設定
    public static Intent getCropImageIntent(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri,"image/*");
        intent.putExtra("crop", "true");// crop=true 有這句才能叫出裁剪頁面.
        intent.putExtra("scale", true); //讓裁剪框支援縮放
        intent.putExtra("aspectX", 1);// 这兩項為裁剪框的比例.
        intent.putExtra("aspectY", 1);// x:y=1:1
        intent.putExtra("outputX", 500);//回傳照片比例X
        intent.putExtra("outputY", 500);//回傳照片比例Y
        intent.putExtra("return-data", true);
        return intent;
    }

    @Override
    protected void onDestroy() {        //釋放內存
        try{
            super.onDestroy();
            //釋放整個介面與圖片
            imageView.setImageBitmap(null);
            imageView=null;
            LL.removeAllViews();
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("text", "New_DISS_Main.onDestroy()崩潰=" + e.toString());
        }
    }
}

 

 

 

 

 

arrow
arrow

    SIN 發表在 痞客邦 留言(0) 人氣()