package weixinlookimgsdemo.hankkin.com.caijianpc;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import java.io.File;
public class MainActivity extends AppCompatActivity {
// 拍照成功,讀取相冊成功,裁減成功
private final int ALBUM_OK = 1, CAMERA_OK = 2,CUT_OK = 3;
private ImageView showIv;
private File file;
Button fromAlbum_button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showIv = (ImageView) findViewById(R.id.show_imageView);
fromAlbum_button=(Button)findViewById(R.id.fromAlbum_button);
fromAlbum_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 來自相冊
Intent albumIntent = new Intent(Intent.ACTION_PICK, null);
/**
* 下面這句話,與其它方式寫是一樣的效果,如果:
* intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
* intent.setType(""image/*");設定資料類型
* 要限制上傳到伺服器的圖檔類型時可以直接寫如:"image/jpeg 、 image/png等的類型"
*/
albumIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(albumIntent, ALBUM_OK);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
System.out.println("requestCode = " + requestCode);
switch (requestCode) {
// 如果是直接從相冊擷取
case ALBUM_OK:
//從相冊中擷取到圖檔了,才執行裁剪動作
if (data != null) {
clipPhoto(data.getData());
}
break;
// 取得裁剪後的圖檔,這裡将其設定到imageview中
case CUT_OK:
/**
* 非空判斷大家一定要驗證,如果不驗證的話, 在剪裁之後如果發現不滿意,
* 要重新裁剪,丢棄 目前功能時,會報NullException
*/
if (data != null) {
setPicToView(data);
}
break;
default:
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
/**
* 裁剪圖檔方法實作
* @param uri
*/
public void clipPhoto(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 下面這個crop = true是設定在開啟的Intent中設定顯示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是寬高的比例,這裡設定的是正方形(長寬比為1:1)
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪圖檔寬高
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("return-data", true);
startActivityForResult(intent, CUT_OK);
}
/**
* 儲存裁剪之後的圖檔資料 将圖檔設定到imageview中
*
* @param picdata
*/
private void setPicToView(Intent picdata) {
Bundle extras = picdata.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
Drawable drawable = new BitmapDrawable(photo);
showIv.setImageDrawable(drawable);
}
}
}