我从相机或图库中获取图像并将其设置为我的imageview。不幸的是,当屏幕旋转时,imageview显示什么都没有。 如何保持图像可见?
这是我获取图片的代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case REQUEST_IMAGE_CAPTURE:
// if taking
if (resultCode == RESULT_OK && null != data && TAKE_OR_PICK == 1) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
int width = imageBitmap.getWidth();
int height = imageBitmap.getHeight();
if(height>width) {
int crop = (height - width) / 2;
Bitmap cropImg = Bitmap.createBitmap(imageBitmap, crop, 0, width, width);
image.setImageBitmap(cropImg);
}
else if (width>height){int crop = (width - height) / 2;
Bitmap cropImg = Bitmap.createBitmap(imageBitmap, crop, 0, height, height);
image.setImageBitmap(cropImg);}
else {image.setImageBitmap(imageBitmap);}
}
break;
case RESULT_LOAD_IMAGE:
// if choosing
if (resultCode == RESULT_OK && null != data && TAKE_OR_PICK == 2) {
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
Bitmap imageBitmap = BitmapFactory.decodeFile(picturePath);
int width = imageBitmap.getWidth();
int height = imageBitmap.getHeight();
if(height>width) {
int crop = (height - width) / 2;
Bitmap cropImg = Bitmap.createBitmap(imageBitmap, crop, 0, width, width);
image.setImageBitmap(cropImg);
}
else if (width>height){int crop = (width - height) / 2;
Bitmap cropImg = Bitmap.createBitmap(imageBitmap, crop, 0, height, height);
image.setImageBitmap(cropImg);
}
else {image.setImageBitmap(imageBitmap);}
}
我尝试过使用onSaveInstanceState(),但无法使其适用于位图。还有另一种方法可以达到这个目的吗?
答案 0 :(得分:1)
通常有三种方法可以做到这一点:
正如一些答案所暗示的那样,你可以区分出案例 您的活动是第一次创建并正在恢复中 来自savedInstanceState。这是通过覆盖来完成的 onSaveInstanceState并检查onCreate的参数。
2.您可以通过添加android来锁定活动:screenOrientation =" portrait" (或"风景")到 在你的清单中。
3.您可以通过指定
告诉系统您打算自己处理屏幕更改
机器人:configChanges ="取向"在标签中。这条路
活动不会被重新创建,但会收到回调
相反(你可以忽略它,因为它对你没用)
答案 1 :(得分:0)
在您的情况下发生的情况是,如果您旋转设备,则会重新创建活动。尝试添加AndroidManifest.xml文件的以下内部活动标记。希望这会有所帮助。
android:configChanges="orientation | screenSize"
答案 2 :(得分:0)
正如Gazi所说,如果不允许用户旋转通过清单“关闭”选项的屏幕。
如果不相关,你应该有一个
的功能fillAllData()
在"onResume"
内调用,如果你有位图,则将其添加到图像中(你可以将它保存在onSaveInstance中)
private ImageView mMyImageView;
private String tempFileName;
onCreate(){
setContentView(R.layout.myLayout);
mMyImageView = (ImageView)findViewById(R.id.myImageView);
}
onActivityResult(){
//do all your code plus this:
tempFileName = random string;
save bitmap after process in tempFileName
update in application some flag that a temp file image is available;
}
onResume(){
if temp file name is available load bitmap into your image view.
}