【问题标题】:Android Preview Picture on Multiple ImageButtons多个 ImageButtons 上的 Android 预览图片
【发布时间】:2014-02-12 20:05:12
【问题描述】:

我正在尝试创建一个具有两个 ImageButtons 的活动的应用程序。单击每个按钮时,相机会打开并拍摄照片。保存图片后,它会在图像按钮内显示为预览。我可以为其中一个执行此操作,但是当单击第二个时,它会覆盖第一个图像。

有没有办法将被点击的元素传递给 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/

【问题讨论】:

    标签: android image android-intent preview image-capture


    【解决方案1】:

    是的。这就是startActivityForResult 函数的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;
    

    并根据requestCode 选择ImageView 将分配捕获的位图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-22
      • 2014-09-27
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 2017-12-16
      相关资源
      最近更新 更多