編輯:關於Android編程
關於拍照截取和相冊截取,看了網上很多資料,自己整理了一份比較詳細的,供有需要的人參考
1 拍照
原理就是通過intent調用系統的相機,拍完照在回調進行操作,成功獲取到拍完照的圖片根據uri調用系統的裁剪頁面,裁剪完也是在回調中進行處理,顯示在頁面的imageview中。
2 相冊選取圖片
原理也是通過intent打開系統的圖片,用戶選擇完成以後在回調中根據圖片的uri調用系統的裁剪頁面,同上。
首先,定義幾個常量
public static final int TAKE_PHOTO = 1; public static final int CROP_PHOTO = 2; public static final int ACTION_CHOOSE=3; private Uri imageUri; //圖片路徑 private String filename; //圖片名稱
然後在拍照和相冊選擇的按鈕中處理事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt1: //拍照截取
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date(System.currentTimeMillis());
filename = format.format(date);
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File outputImage = new File(path, filename +".jpg");
try {
if (outputImage.exists()) {
outputImage.delete();
}
outputImage.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
//將File對象轉換為Uri並啟動照相程序
imageUri = Uri.fromFile(outputImage);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //照相
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //指定圖片輸出地址
startActivityForResult(intent, TAKE_PHOTO); //啟動照相
break;
case R.id.bt2: //相冊選取
Intent intent2 = new Intent(Intent.ACTION_PICK);
intent2.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
startActivityForResult(intent2,ACTION_CHOOSE);
break;
}
}
最主要的在回調中的執行
// 使用startActivityForResult返回結果時調用的方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode!=RESULT_OK){
Toast.makeText(this, "取消了", Toast.LENGTH_SHORT).show();
return;
}
switch (requestCode) {
case TAKE_PHOTO: //拍照的回調
cropImage();
break;
case ACTION_CHOOSE: //選擇照片的回調
imageUri = data.getData();
cropImage();
break;
case CROP_PHOTO: //裁剪完照片的回調
showPic();
break;
default:
break;
}
}
裁剪圖片的方法
/**
* 裁剪圖片
**/
private void cropImage() {
Intent intent = new Intent("com.android.camera.action.CROP"); //剪裁
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
//設置寬高比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//設置裁剪圖片寬高
intent.putExtra("outputX", 340);
intent.putExtra("outputY", 340);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
Toast.makeText(MainActivity.this, "剪裁圖片", Toast.LENGTH_SHORT).show();
//廣播刷新相冊
Intent intentBc = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intentBc.setData(imageUri);
this.sendBroadcast(intentBc);
startActivityForResult(intent, CROP_PHOTO); //設置裁剪參數顯示圖片至ImageView
}
過程比較簡單,可能會有一些判斷的地方沒有處理,如果有不對的地方希望有高手可以幫忙改進,謝謝~~
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
Android之短信驗證碼
我們今天所使用的方案只是android手機設備集成短信驗證碼功能的方案之一。我們所采用的方案是使用聚合數據的短信驗證sdk。 程序的界面如下所示: 實
Android導入第三方jar包
這個和純JAVA項目有點出入。引入最終要編譯成APK。需要連同JAR包一起帶進去。 在adt17 的版本之前,導入第三方jar包時要建立一個lib目錄,並 add to
Android開發ViewPager和Fragment結合使用實現新聞類app( 三 )(基本成型的app)
提示:因為該新聞app已經基本完成,所以下方代碼量較大,請謹慎!或者從 ViewPager和Fragment結合使用實現新聞類app(一)一步步向下看!經過幾天的努力,不
Android WebView 輸入框鍵盤不彈出
問題 在Android中使用內嵌的WebView加載HTML網頁時,如果html頁面中存在輸入框。那麼在有些手機設備中,當輸入框獲取焦點時,系統輸入法鍵盤無法正確彈出,從