在改变方向后保持imageview

时间:2015-07-29 09:06:28

标签: android imageview

我从相机或图库中获取图像并将其设置为我的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(),但无法使其适用于位图。还有另一种方法可以达到这个目的吗?

3 个答案:

答案 0 :(得分:1)

通常有三种方法可以做到这一点:

  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.
    }