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()); } } }
文章標籤
全站熱搜