拍照并在ImageView中显示

时间:2014-11-04 07:37:00

标签: android android-imageview

我想用这样的Android相机拍照:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

this.startActivityForResult(intent, Globals.REQUEST_CODE_CAMERA)

并将其存储在ImageView中:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == Globals.REQUEST_CODE_CAMERA) {
        if(resultCode == RESULT_OK) {
            Bundle bundle = data.getExtras();
            Bitmap bitmap = (Bitmap) bundle.get("data");

            this.imageViewPhoto.setImageBitmap(bitmap);
        }
    }
}

我的ImageView配置如下:

<ImageView
        android:id="@+id/nfcresult_imageview_photo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" 
        android:adjustViewBounds="true"
        android:clickable="true"
        android:contentDescription="@string/imageview_photo_description" />

这一切都有效,但ImageView上显示的照片远小于 相机拍的照片。我想做的是在我的网站上做一个小预览 ImageView并将一个OnClickListener添加到ImageView以打开一个Dialog 它显示原始大小和分辨率的原始照片。它不能 难以做到这一点,但我实际上无法找到方法。

要创建对话框并显示照片,请执行以下操作:

ImageView clone = new ImageView(this);
clone.setImageBitmap(((BitmapDrawable)this.imageViewPhoto.getDrawable()).getBitmap());

DialogManager.showImageDialog(this, this.getResources().getString(R.string.title_photo), clone);

showImageDialog:

 public static void showImageDialog(Context context, String title, ImageView imageView) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);

    builder.setTitle(title);
    builder.setCancelable(false);
    builder.setView(imageView);
    builder.setPositiveButton(context.getResources().getString(R.string.button_back), new DialogInterface.OnClickListener() {
        /**
         * 
         */
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });

    builder.create().show();
}

对话框现在显示照片的大小,该照片存储在imageView中 但我想用原始尺寸和原始分辨率显示原始照片 但正如我已经说过的,ImageView应该显示原始版本的较小版本 照片。

我如何实现这一目标?

3 个答案:

答案 0 :(得分:0)

而不是android:layout_width =&#34; wrap_content&#34;将imageview宽度和高度设置为特定的dp值

<ImageView
        android:id="@+id/nfcresult_imageview_photo"
        android:layout_width="100dp"
        android:layout_height="200dp"
        android:src="@drawable/ic_launcher" 
        android:adjustViewBounds="true"
        android:clickable="true"
        android:contentDescription="@string/imageview_photo_description" />

保持高度和宽度的宽高比(而不是100和200,选择正确的值)

答案 1 :(得分:0)

你必须在你的意图中添加一个名为“MediaStore.EXTRA_OUTPUT”的额外内容,你必须为要存储的图片设置一个uri。 调用回调函数后,可以从选择的uri中加载图片。 在那里你可以得到全分辨率的图片。

答案 2 :(得分:0)

解决方案:

/**
 * 
 */
private void performAddPhoto() {
    String timeStamp = Clock.getTimeStamp();
    String fileName = "Food_Shot_" + timeStamp + ".jpg";

    this.imagePath = Environment.getExternalStorageDirectory() + "/images/" + fileName;

    File file = new File(this.imagePath);
    file.getParentFile().mkdirs();

    try {
        file.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

    startActivityForResult(intent, Globals.REQUEST_CODE_CAMERA);
}

/**
 * 
 */
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == Globals.REQUEST_CODE_CAMERA) {
        if(resultCode == RESULT_OK) {
            this.onPhotoTaken();
        }
    }
}

/**
 * 
 */
private void onPhotoTaken() {
    this.imageTaken = true;

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 4;

    Bitmap bitmap = BitmapFactory.decodeFile(this.imagePath, options);
    this.imageViewPhoto.setImageBitmap(bitmap);
}

/**
 * 
 */
private void performShowPhoto() {
    ImageView imageView = new ImageView(this);
    Bitmap bitmap = BitmapFactory.decodeFile(this.imagePath);

    imageView.setImageBitmap(bitmap);

    DialogManager.showImageDialog(this, this.getResources().getString(R.string.title_photo), imageView);
}