Imageview打开相机
问题出现的原因是当点击ImageView时,会启动相机应用来拍照,并将拍摄的照片显示在ImageView上。然而,在处理返回结果时,代码中使用了错误的键来获取照片数据,导致无法正确地设置图片。
解决方法是修改代码中的键为正确的键,以便正确地获取照片数据并将其设置在ImageView上。
以下是修正后的代码:
imageView = (ImageView) findViewById(R.id.ImageView1); imageView.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent imageLoader = (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) ? new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE) : new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(imageLoader, 1); } }); protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK){ switch (requestCode) { case 1: your_image_container_to_set_image.setImageBitmap((Bitmap) data.getExtras().get("data")); //使用正确的键来获取照片数据并设置在ImageView上 break; } } }
同时,为了能够读取外部存储中的图片,还需要在AndroidManifest.xml文件中添加读取外部存储的权限:
通过以上修改,问题应该能够得到解决。
问题的出现原因:
在点击imageView的时候,调用了takePicture()方法,该方法中通过Intent启动了系统相机应用,并传入了一个文件路径,在拍照完成后,将拍摄的照片保存到该文件路径,并通过setImageURI()方法将照片显示在imageView上。但是在onActivityResult()方法中,无法正确将拍摄的照片设置给imageView。
解决方法:
1. 首先,确保在AndroidManifest.xml文件中添加了相机权限的声明:
2. 确保在布局文件中正确定义了ImageView组件:
android:id="@+id/ImageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 3. 将代码中的imageView定义为全局变量,在onCreate()方法中初始化: private ImageView imageView; 4. 修改takePicture()方法,将拍摄的照片保存到指定文件路径: private Uri file; public void takePicture(View view) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); file = Uri.fromFile(getOutputMediaFile()); intent.putExtra(MediaStore.EXTRA_OUTPUT, file); startActivityForResult(intent, 100); } 5. 修改onActivityResult()方法,使用BitmapFactory从文件路径中读取照片,并设置给imageView: protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 100) { if (resultCode == RESULT_OK) { Bitmap bitmap = BitmapFactory.decodeFile(file.getPath()); imageView.setImageBitmap(bitmap); } } } 6. 最后,确保getOutputMediaFile()方法能够正确创建保存照片的文件路径: private static File getOutputMediaFile(){ File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "CameraDemo"); if (!mediaStorageDir.exists()){ if (!mediaStorageDir.mkdirs()){ return null; } } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); return new File(mediaStorageDir.getPath() + File.separator + "IMG_"+ timeStamp + ".jpg"); } 通过以上步骤,可以解决ImageView无法显示拍摄照片的问题。