안 드 로 이 드 는 사용자 프로필 사진 교체 작업 을 실현 합 니 다.

너 는 프로필 사진 을 바 꾸 는 것 이 매우 쉽다 고 생각 하 니?아마도 사용자 에 게 위 챗 에서 프로필 사진 을 바 꾸 는 것 은 프로필 사진 을 클릭 하고 사진 이나 앨범 을 선택 하여 재단 하고 되 돌아 오 는 것 일 것 이다.하지만 프로그래머 에 게 는 실현 하기 도 힘 들 었 다.
사용자 가 사용 하 는 것 처럼 코드 의 실현 도 조작 순서에 따라 점차적으로 전개 된다.다음 그림:

다음은 코드 를 설명 하 겠 습 니 다.
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
이상 은 본 고의 모든 내용 입 니 다.여러분 이 안 드 로 이 드 소프트웨어 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기