我是Android新手。我正在测试一个Android应用程序(在互联网上搜索后创建),该应用程序在主要活动中创建一个Intent按钮,启动设备的摄像头并将拍摄的照片返回到主布局中的ImageView。 我的问题是,虽然在模拟器上测试过程成功完成(在保存照片后图片显示在ImageView上),但在测试三星平板电脑2(GT-P7510)与Android时发生了同样的情况版本4.0.4,但是当我试图运行在三星S4智能手机(GT-I9500)与版本5.0.1它保存图片,但照片是未显示ImageView在主要布局。onActivityResult完成后照片未显示在主要活动上
有人有同样的问题吗?
我读过它可能是OnCreate上的一些问题,但无法解决它。
下面是代码的一部分。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_call_camera);
photoImage = (ImageView) findViewById(R.id.photo_image);
callCameraButton = (Button)
findViewById(R.id.button_callcamera);
photoImage.setVisibility(View.VISIBLE);
callCameraButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = Uri.fromFile(getOutputPhotoFile());
i.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
archivo = fileUri.getEncodedPath();
startActivityForResult(i, CAPTURE_IMAGE_ACTIVITY_REQ);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQ) {
if (resultCode == RESULT_OK) {
Uri photoUri = null;
if (data == null) {
// A known bug here! The image should have saved in fileUri
Toast.makeText(this, "Image saved successfully",
Toast.LENGTH_LONG).show();
photoUri = fileUri;
} else {
photoUri = data.getData();
Toast.makeText(this, "Image saved successfully in: " + data.getData(),
Toast.LENGTH_LONG).show();
}
showPhoto(archivo);
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "Cancelled", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Callout for image capture failed!",
Toast.LENGTH_LONG).show();
}
}
}
private void showPhoto(String photoUri) {
File imageFile = new File (photoUri);
if (imageFile.exists()){
Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
BitmapDrawable drawable = new BitmapDrawable(this.getResources(), bitmap);
photoImage.setScaleType(ImageView.ScaleType.FIT_CENTER);
photoImage.setImageDrawable(drawable);
}
}
你不需要这个showPhoto(String uri)方法。 您可以使用ImageView.setImageURI方法,该方法使用从成功意图获取的URI。 这里是链接http://developer.android.com/reference/android/widget/ImageView.html#setImageURI(android.net.Uri) –
谢谢尼古拉。我已经尝试过,但也没有工作。 – Cloio
我发现的是,由于S4摄像头拍摄的照片数量庞大,这就是ImageView上没有显示的原因。我发现下一个链接的解决方案http://stackoverflow.com/questions/29932060/imageview-will-not-load-via-setimageuri-when-ran-on-samsung-galaxy-s4-only(谢谢AJ9! )为我工作。唯一的问题是现在图像旋转90度,并且如果选择肖像始终显示在横向。 – Cloio