Изображение предварительного просмотра Android на нескольких кнопках ImageButtons

Я пытаюсь создать приложение с двумя кнопками ImageButton. При нажатии на каждую из кнопок открывается камера и делается снимок. как только изображение будет сохранено, оно будет представлено в виде предварительного просмотра внутри кнопки изображения. Я могу сделать это для одного из них, но при нажатии на второй он переопределяет первое изображение.

Есть ли способ передать элемент, который был нажат, методу 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();
    }
}

Я хотел бы передать фактический ImageButton, щелкнутый из onActivityResult, в метод previewCaptureImage, чтобы динамически установить изображение либо в ImageButton, либо в ImageButton2.

Любая помощь в этом будет высоко оценена.

Спасибо

Себ

PS: размещенный здесь код был взят из следующего примера: http://www.androidhive.info/2013/09/android-working-with-camera-api/


person tzuvy    schedule 12.02.2014    source источник


Ответы (1)


Да. Это назначение параметра requestCode функции startActivityForResult. У вас должен быть другой код для каждой из кнопок, которые будут «получать» изображение.

Что-то типа:

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;

И на основе requestCode выберите ImageView, которому будет назначено захваченное растровое изображение.

person frozenkoi    schedule 12.02.2014