該功能主要實現上傳圖片到服務器,選擇圖片的方式有兩種,一種是從手機相冊中選擇,另一種是調用手機攝像頭拍照。如圖:
Java 代碼複製內容到剪貼板
- /*用來標識請求照相功能的activity*/
- private static final int CAMERA_WITH_DATA = 1001;
- /*用來標識請求gallery的activity*/
- private static final int PHOTO_PICKED_WITH_DATA = 1002;
Java 代碼複製內容到剪貼板
- private Bitmap bitMap; //用來保存圖片
- private boolean hasImage; //是否已經選擇了圖片
Java 代碼複製內容到剪貼板
- /**
- * 拍照獲取圖片
- *
- */
- protected void doTakePhoto() {
- try {
- Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- startActivityForResult(cameraIntent, CAMERA_WITH_DATA);
- } catch (ActivityNotFoundException e) {
- e.printStackTrace();
- }
- }
- /**
- * 從本地手機中選擇圖片
- */
- private void doSelectImageFromLoacal(){
- Intent localIntent = new Intent();
- localIntent.setType("image/*");
- localIntent.setAction("android.intent.action.GET_CONTENT");
- Intent localIntent2 = Intent.createChooser(localIntent, "選擇圖片");
- startActivityForResult(localIntent2, PHOTO_PICKED_WITH_DATA);
- }
然後需要重寫onActivityResult()方法,判斷是否那種方式獲取的圖片。
Java 代碼複製內容到剪貼板
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (resultCode != RESULT_OK)
- return;
- switch (requestCode) {
- case PHOTO_PICKED_WITH_DATA: //從本地選擇圖片
- if (bitMap != null && !bitMap.isRecycled()) {
- bitMap.recycle();
- }
- Uri selectedImageUri = data.getData();
- if(selectedImageUri != null){
- try {
- bitMap = BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImageUri));
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- //下面這兩句是對圖片按照一定的比例縮放,這樣就可以完美地顯示出來。有關圖片的處理將重新寫文章來介紹。
- int scale = ImageThumbnail.reckonThumbnail(bitMap.getWidth(), bitMap.getHeight(), 500, 600);
- bitMap = ImageThumbnail.PicZoom(bitMap, (int) (bitMap.getWidth() / scale), (int) (bitMap.getHeight() / scale));
- imageView.setImageBitmap(bitMap);
- imageView.setVisibility(View.VISIBLE);
- hasImage = true;
- }
- break;
- case CAMERA_WITH_DATA: //拍照
- Bundle bundle = data.getExtras();
- bitMap = (Bitmap)bundle.get("data");
- if (bitMap != null)
- bitMap.recycle();
- bitMap = (Bitmap) data.getExtras().get("data");
- int scale = ImageThumbnail.reckonThumbnail(bitMap.getWidth(), bitMap.getHeight(), 500, 600);
- bitMap = ImageThumbnail.PicZoom(bitMap, (int) (bitMap.getWidth() / scale), (int) (bitMap.getHeight() / scale));
- imageView.setImageBitmap(bitMap);
- imageView.setVisibility(View.VISIBLE);
- hasImage = true;
- break;
- }
- }
-