【问题标题】:Canvas: trying to use a recycled bitmap android - onSaveInstanceState画布:尝试使用回收的位图 android - onSaveInstanceState
【发布时间】:2013-09-04 05:15:12
【问题描述】:

我通过 Intent 使用相机拍摄图像,然后将其保存到图像视图。意图相机处于横向模式,它返回的活动处于纵向模式。所以活动改变了方向并重新加载了一个新的活动。我正在尝试将此图像保存在该图像视图中。但是,在返回到活动页面时,一旦活动处于纵向模式,它就会消失。当我添加 onSaveInstanceState 方法时,它会因错误而崩溃:

  Canvas: trying to use a recycled bitmap android

我已添加以下代码:

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_page);
    imageView = (ImageView) findViewById(R.id.result);
    if(savedInstanceState != null){
        Bitmap photo = savedInstanceState.getParcelable("savedImage");
        imageView.setImageBitmap(photo);
        }

  }

我保存的图片如下

protected void onSaveInstanceState(Bundle icicle){
      super.onSaveInstanceState(icicle);
      imageView.buildDrawingCache();
      Parcelable bm = imageView.getDrawingCache();
      icicle.putParcelable("savedImage",bm);
  }

【问题讨论】:

    标签: android bitmap android-activity oncreate


    【解决方案1】:

    画布错误是因为方向更改后位图不再存在。此外,您在 onSavedInstanceState() 中设置的 Parcelable 可能不存在。可以这样想:视图在逻辑上比意图和回调结果“更高级别”。

    您可以在使用它填充视图之前将图像从相机保存到文件系统。

    所以,更多的家务。这就是我在几个生产/发布的应用程序中所做的......并且可能有更好的方法(?)

    1. 在触发相机意图之前提前定义一个文件(路径和名称)。
    2. 消防相机,通过intent->data parm 获取其位图图像传递到onActivityResult()
    3. 仍在 onActivityResult 中,将位图放入 View AND
    4. 然后将其写入已知文件(并关闭它)。

    请注意,在第 2 步和第 3 步之间,您可以压缩位图以节省空间。

    为了处理重新定向,在 onStart 或 onResume 中有一个例程 - 在 onCreate() 之后被触发:

    1. 尝试打开那个已知文件
    2. 如果失败或没有数据:

      然后使用一些默认图像(可以是 RES jpg),

      else 文件和它的图像是好的: 将文件中的图像放入imageView中

    3. 关闭文件。

    这样,无论发生什么,你都有一些东西可以放在那里。大多数时候,它按预期工作:))(他说在几乎折断 4 个人的手腕后高速翻转安卓手机 LOL)

    顺便说一句 - 由于相机硬件因供应商而异,此问题可能会更加复杂。一些设备在相机处理之前、期间和之后都保持相同的方向。其他人,比如一些(或全部?)较新的三星,无论你做什么,都会翻转相机方向(除非你放弃硬件——这要复杂得多)。

    您遇到问题的设备是三星吗? - 请注意,它们会引起更多的头痛。

    【讨论】:

    • 摄像头很头疼,能帮你避免几个就好了:))
    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2015-09-21
    • 2011-03-03
    • 2015-12-04
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多