Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android實現用戶頭像更換操作

Android實現用戶頭像更換操作

編輯:關於Android編程

你以為頭像更換很容易?或許對於用戶來講,在微信上更換一個頭像只是點擊頭像,選擇拍照或相冊,裁剪返回而已。但是對於程序員來說,要實現其實也挺吃力的(小火柴花了一個下午整理~_~)。

正如用戶使用那樣,代碼的實現也是按照操作的順序而逐步展開。如下圖:

接下來主要來講解一下代碼:

1. 彈框選擇相冊或拍照

比較簡單的方式就是直接使用AlertDialog彈出選項供用戶進行選擇

public static void showImagePickDialog(final Activity activity){

 String title = "選擇獲取圖片方式";
 String[] items = new String[]{"拍照","相冊"};

 new AlertDialog.Builder(activity)
  .setTitle(title)
  .setItems(items, new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {

     dialog.dismiss();
     switch (which){
       case 0:
       //選擇拍照
       pickImageFromCamera(activity);
       break;
       case 1:
       //選擇相冊
       pickImageFromAlbum(activity);
       break;
       default:
       break;
      }
     }
    }).show();
 }

2. 調用系統相機

在調用系統相機前,我們需要傳入自定義路徑的圖片Uri,指定拍照的圖片存放在這個Uri下,如果直接在返回時使用getData()獲取的是壓縮過的Bitmap數據

public static void pickImageFromCamera(final Activity activity){
 //獲得指定路徑的Uri
 imageUriFromCamera = getImageUri();

 Intent intent = new Intent();
 intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
 intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUriFromCamera);
 activity.startActivityForResult(intent,REQUEST_CODE_FROM_CAMERA);
}

3. 打開系統相冊

直接調用系統相冊,再對返回數據進行操作

public static void pickImageFromAlbum(final Activity activity){

  //隱式調用,可能出現多種選擇
  Intent intent = new Intent();
  intent.setAction(Intent.ACTION_GET_CONTENT);
  intent.setType("image/*");
  activity.startActivityForResult(intent,REQUEST_CODE_FROM_ALBUM);
}

4. 對返回圖片Uri進行裁剪工作

對於拍照返回,直接對返回圖片進行裁剪即可;而對於選擇相冊返回,我們需要先將原圖片復制到我們自定義的目錄下(避免裁剪操作對原圖片的質量產生影響),然後對復制的圖片進行裁剪

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);

  switch (requestCode){
   case ImageUtils.REQUEST_CODE_FROM_ALBUM: {

    if (resultCode == RESULT_CANCELED) { //取消操作
     return;
    }

    Uri imageUri = data.getData();
    ImageUtils.copyImageUri(this,imageUri); //復制圖片
    ImageUtils.cropImageUri(this, ImageUtils.getCurrentUri(), 200, 200); //裁剪圖片
    break;
   }
   case ImageUtils.REQUEST_CODE_FROM_CAMERA: {

    if (resultCode == RESULT_CANCELED) { //取消操作
     ImageUtils.deleteImageUri(this, ImageUtils.getCurrentUri()); //刪除Uri
    }

    ImageUtils.cropImageUri(this, ImageUtils.getCurrentUri(), 200, 200); //裁剪圖片
    break;
   }
   case ImageUtils.REQUEST_CODE_CROP: {

    if (resultCode == RESULT_CANCELED) { //取消操作
     return;
    }

    Uri imageUri = ImageUtils.getCurrentUri();
    if (imageUri != null) {
     imageView.setImageURI(imageUri); //顯示圖片
    }
    break;
   }
   default:
    break;
  }
 }

以上只給了部分代碼,需要完整代碼的同學可以到GitHub上下載:
https://github.com/ZhouCP/PhotoDemo

以上就是本文的全部內容,希望對大家學習Android軟件編程有所幫助。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved