마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

킷캣에서 앨범 불러온 후 자르기 할 때 팅기는 현상.. [closed]

0 추천

 

문제에 영상입니다.

 

http://serviceapi.nmv.naver.com/flash/convertIframeTag.nhn?vid=3EDFFA00C810E7F131C89B5051667AA86F18&outKey=V1267a1840e309c53f28126ae0e820ef3dc3244b41b2b57b1b6bb26ae0e820ef3dc32&width=720&height=438

 

사진 불러오기를 하여 앨범에서 이미지 선택 후 크롭하여 이미지 뷰에 보여줘야 되는데

 

크롭하고 나서 확인 누르면 그냥 크롭화면 사라지더니 이전 액티비티로 돌아갑니다.

 

킷캣부터 뭔가 바꼈다고 하는데

package com.example.camera;

import java.io.File;
import com.example.camera.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
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.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class MainActivity extends Activity implements OnClickListener {
 private ImageView mPhotoImageView;// 이미지 받기
 private ImageView foot;
 private Uri mImageCaptureUri;

 private static final int PICK_FROM_CAMERA = 0;
 private static final int PICK_FROM_ALBUM = 1;
 private static final int CROP_FROM_CAMERA = 2;
 LinearLayout bar, mother = null;
 FrameLayout container = null;
 Bitmap bm = null;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  Button mButton = (Button) findViewById(R.id.load);
  mPhotoImageView = (ImageView) findViewById(R.id.profile);
  mButton.setOnClickListener(this);
 }

 private void doTakePhotoAction() {
  Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

  // 임시로 사용할 파일의 경로를 생성
  String url = "tmp.jpg";

  mImageCaptureUri = Uri.fromFile(new File(Environment
    .getExternalStorageDirectory(), url));

  intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,
    mImageCaptureUri);

  // 특정기기에서 사진을 저장못하는 문제가 있어 다음을 주석처리 합니다.
  // intent.putExtra("return-data", true);
  startActivityForResult(intent, PICK_FROM_CAMERA);

 }

 private void doTakeAlbumAction() {
  // 앨범 호출
  Intent intent = new Intent(Intent.ACTION_PICK);
  intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
  startActivityForResult(intent, PICK_FROM_ALBUM);
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (resultCode != RESULT_OK) {
   return;
  }

  switch (requestCode) {
  case CROP_FROM_CAMERA: {
   // 크롭이 된 이후의 이미지를 넘겨 받습니다.
   // 이미지뷰에 이미지를 보여준다거나 부가적인 작업 이후에
   // 임시 파일을 삭제합니다.
   final Bundle extras = data.getExtras();

   if (extras != null) {
    Bitmap photo = extras.getParcelable("data");
    mPhotoImageView.setImageBitmap(photo);
   }

   // 임시 파일 삭제
   File f = new File(mImageCaptureUri.getPath());
   if (f.exists()) {
    f.delete();
   }

   break;
  }

  case PICK_FROM_ALBUM: {
   // 이후의 처리가 카메라와 같으므로 일단 break없이 진행합니다.
   // 실제 코드에서는 좀더 합리적인 방법을 선택하시기 바랍니다.

   mImageCaptureUri = data.getData();
  }

  case PICK_FROM_CAMERA: {
   // 이미지를 가져온 이후의 리사이즈할 이미지 크기를 결정합니다.
   // 이후에 이미지 크롭 어플리케이션을 호출하게 됩니다.

   Intent intent = new Intent("com.android.camera.action.CROP");
   intent.setDataAndType(mImageCaptureUri, "image/*");

   intent.putExtra("outputX", 120);
   intent.putExtra("outputY", 130);
   // intent.putExtra("aspectX", 1);
   // intent.putExtra("aspectY", 1);
   intent.putExtra("scale", true);
   intent.putExtra("return-data", true);

   startActivityForResult(intent, CROP_FROM_CAMERA);

   break;
  }
  }
 }

 @Override
 public void onClick(View v) {
  if (v.getId() == R.id.load) {
   DialogInterface.OnClickListener cameraListener = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
     doTakePhotoAction();
    }
   };

   DialogInterface.OnClickListener albumListener = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
     doTakeAlbumAction();
    }
   };

   DialogInterface.OnClickListener cancelListener = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
     dialog.dismiss();
    }
   };

   new AlertDialog.Builder(this).setTitle("업로드할 이미지 선택")
     .setPositiveButton("사진촬영", cameraListener)
     .setNeutralButton("앨범선택", albumListener)
     .setNegativeButton("취소", cancelListener).show();

  }

 }
}

 

검색은 해봤는데 

ACTION_PICK 또는 ACTION_GET_CONTENT 

이거 때문인가요?

4.4 부터 ACTION_OPEN_DOCUMENT 이거를 써야 한다고 하는거 같기도 해서요

참고 링크입니다

https://medium.com/marojuns-android/kitkat-4-4-%EC%97%90%EC%84%9C-%EB%A7%9E%EB%8B%A5%EB%9C%A8%EB%A6%B0-%EC%9D%B4%EC%8A%88-%EB%B0%8F-%ED%95%B4%EA%B2%B0-1ecb94c24694

어느 부분을 수정해줘야 하나요?

 

 저렇게 해서 테스트하는데 특정사진만 유독 팅기는 현상이 발생합니다.

자르기 기본 크기로 하면 팅기고 자르기 영역을 작게 하면 되구요.
이것도 원인이 있나요?

 

질문을 종료한 이유: 자답입니다. http://yonoo88.tistory.com/583 참고 링크입니다.
브루스웨인 (8,580 포인트) 님이 2014년 12월 8일 질문
브루스웨인님이 2014년 12월 20일 closed
자답입니다.
http://yonoo88.tistory.com/583
참고 링크입니다.
...