2014-02-12 3 views
1

두 개의 ImageButton이있는 활동이있는 앱을 만들려고합니다. 각 버튼을 클릭하면 카메라가 열리고 사진이 촬영됩니다. 사진이 저장되면 이미지 버튼 안에 미리보기로 표시됩니다. 나는 그들 중 한 명을 위해 그것을 할 수 있지만 두 번째를 클릭하면 첫 번째 이미지를 덮어 씁니다.여러 개의 ImageButton에 대한 Android 미리보기 그림

onActivityResult 메서드로 클릭 한 요소를 전달하여 이미지를 포함시킬 ImageButton을 설정하는 방법이 있습니까?

// Activity request codes 
private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100; 
private static final int CAMERA_CAPTURE_VIDEO_REQUEST_CODE = 200; 
public static final int MEDIA_TYPE_IMAGE = 1; 
public static final int MEDIA_TYPE_VIDEO = 2; 

// directory name to store captured images and videos 
private static final String IMAGE_DIRECTORY_NAME = "Hello Camera"; 

private Uri fileUri; // file url to store image/video 

private ImageButton imageButton; 
private ImageButton imageButton2; 

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

    imageButton =(ImageButton) findViewById(R.id.imageButton); 
    imageButton2 =(ImageButton) findViewById(R.id.imageButton2); 


    // Checking camera availability 
    if (!isDeviceSupportCamera()) { 
     Toast.makeText(getApplicationContext(), 
       "Sorry! Your device doesn't support camera", 
       Toast.LENGTH_LONG).show(); 
     // will close the app if the device does't have camera 
     finish(); 
    } 
} 

캡처 이미지 개시 방법 :

public void captureImage(View view) { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

    // start the image capture Intent 

    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 
} 

하여 onActivityResult 방법 : 마지막

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // if the result is capturing Image 
    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) { 
     if (resultCode == RESULT_OK) { 
      // successfully captured the image 
      // display it in image view 
      // data.getComponent(); 
      previewCapturedImage(null); 
     } else if (resultCode == RESULT_CANCELED) { 
      // user cancelled Image capture 
      Toast.makeText(getApplicationContext(), 
        "User cancelled image capture", Toast.LENGTH_SHORT) 
        .show(); 
     } else { 
      // failed to capture image 
      Toast.makeText(getApplicationContext(), 
        "Sorry! Failed to capture image", Toast.LENGTH_SHORT) 
        .show(); 
     } 
    } else if (requestCode == CAMERA_CAPTURE_VIDEO_REQUEST_CODE) { 
     if (resultCode == RESULT_OK) { 
      // video successfully recorded 
      // preview the recorded video 
      previewCapturedImage(null); 
     } else if (resultCode == RESULT_CANCELED) { 
      // user cancelled recording 
      Toast.makeText(getApplicationContext(), 
        "User cancelled video recording", Toast.LENGTH_SHORT) 
        .show(); 
     } else { 
      // failed to record video 
      Toast.makeText(getApplicationContext(), 
        "Sorry! Failed to record video", Toast.LENGTH_SHORT) 
        .show(); 
     } 
    } 
} 

previewCapturedImage 방법 :

다음과 같이

코드는

private void previewCapturedImage(View view) { 
    try { 
     // hide video preview 
     //videoPreview.setVisibility(View.GONE); 

     imageButton.setVisibility(View.VISIBLE); 

     // bimatp factory 
     BitmapFactory.Options options = new BitmapFactory.Options(); 

     // downsizing image as it throws OutOfMemory Exception for larger 
     // images 
     options.inSampleSize = 8; 

     final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(), 
       options); 

     **imageButton.setImageBitmap(bitmap);** 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } 
} 

onActivityResult에서 클릭 한 실제 ImageButton을 previewCaptureImage 메서드에 전달하여 ImageButton 또는 ImageButton2에서 이미지를 동적으로 설정하고 싶습니다.

이 문제에 대한 도움을 주시면 감사하겠습니다.

감사

PS : 여기에 게시 코드는 다음 예에서 찍은 : http://www.androidhive.info/2013/09/android-working-with-camera-api/

답변

0

예. 이것이 startActivityForResult 함수의 requestCode 매개 변수의 목적입니다. 이미지를 '수신'할 각 버튼마다 다른 코드가 있어야합니다. 같은

뭔가 다음 requestCode

private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100; 
private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE_SECONDARY = 101; 
private static final int CAMERA_CAPTURE_VIDEO_REQUEST_CODE = 200; 

그리고 기반이 캡처 된 비트 맵을 할당 될 ImageView을 선택합니다.

+0

작동합니다! 답변 해주셔서 감사합니다. 매우 감사! – tzuvy