/*
* @Copyright (c) tianchenglin
* @Author TCL
* @Date 2016.8.5
*/
package com.study.tcl.upload;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private static final int TAKE_PHOTO = 1;
private static final int GALLARY = 2;
private static final int CUT_PICTURE = 3;
private int WIDTH = 1;
private int HEIGHT = 1;
private Intent intent;
private Uri imageUri;
private Button mBtnSelect;
private AlertDialog mSelectDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
//選擇圖檔來源按鈕
mBtnSelect = (Button) findViewById(R.id.btn_select);
//選擇圖檔來源按鈕的點選事件
mBtnSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showSelcetDialog();
}
});
}
/**
* 顯示選擇圖檔對話框
*/
private void showSelcetDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
View view = View.inflate(getApplicationContext(),
R.layout.dialog_layout, null);
builder.setView(view);
mSelectDialog = builder.create();
mSelectDialog.show();
final TextView take_photo = (TextView) view.findViewById(R.id.take_photo);
final TextView select_from_phone = (TextView) view.findViewById(R.id.select_from_phone);
take_photo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//調用系統相機去拍攝照片
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
Log.i("TestFile", "SD card is not avaiable/writeable right now.");
return;
}
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PHOTO);
}
});
select_from_phone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
startActivityForResult(intent, GALLARY);
}
});
}
/**
* 調用系統相機或圖庫傳回的結果
*
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data == null || resultCode != Activity.RESULT_OK) {
return;
}
switch (requestCode) {
case TAKE_PHOTO://拍照後傳回的結果
Bundle bundle = data.getExtras();
//擷取相機傳回的資料,并轉化為bitmap格式
Bitmap bitmap = (Bitmap) bundle.get("data");
if (bitmap == null) {
return;
}
// String title = System.currentTimeMillis() + "";
// //将圖檔儲存到圖庫中
// MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, title, null);
// //更新圖庫
// MediaScannerConnection.scanFile(this, new String[]{bitmap.getAbsolutePath()}, null, null);
if (data.getData() != null) {
imageUri = data.getData();
} else {
//傳回圖庫中圖檔URI
imageUri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, null, null));
}
//調用CropImage方法進行截取圖檔
toCropImage(imageUri, WIDTH, HEIGHT, 480, 320, CUT_PICTURE);
break;
case GALLARY://通過系統相冊擷取到圖檔并進行截取後的傳回值
if (data.getData() != null) {
toCropImage(data.getData(), WIDTH, HEIGHT, 480, 320, CUT_PICTURE);
}
break;
case CUT_PICTURE://調用toCropImage方法截取圖檔後的傳回值
//截取後的邏輯...
Toast.makeText(MainActivity.this, "----", Toast.LENGTH_SHORT).show();
break;
}
}
/**
* @param uri 圖檔的路徑
* @param width 截取框寬的比例
* @param height 截取框高的比例
* @param outputX 圖檔的寬
* @param outputY 圖檔的高
* @param requestCode 截取圖檔的請求碼
*/
private void toCropImage(Uri uri, int width, int height, int outputX, int outputY, int requestCode) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");//設定圖檔uri
intent.putExtra("crop", "true");
intent.putExtra("aspectX", width);
intent.putExtra("aspectY", height);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);//設定截取完成後儲存圖檔的位址
intent.putExtra("return-data", false);//這裡由于是從sd卡直接擷取圖檔,是以不需要通過onActivityResult方法擷取資料
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true);
startActivityForResult(intent, requestCode);
}
}