我想用这样的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应该显示原始版本的较小版本 照片。
我如何实现这一目标?
答案 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);
}