我有一段代码在TextureView
中显示相机预览。偶尔(假设用户按下按钮)我从TextureView
获取位图并将其设置为显示在ImageView
中,如下所示:
private void freezeFrame() {
textureView.getBitmap(freezeBitmap);
imageView.setImageBitmap(freezeBitmap);
}
预先分配freezeBitmap
并在多次调用上述方法时重复使用。
问题是ImageView
会一直显示从第一次调用到freezeFrame()
的位图状态。致电imageView.invalidate()
无济于事。
当我执行以下一个时,问题就会消失:
imageView
以使用软件层(这使我相信位图是从textureView
正确获取的,但未以硬件模式上传到GPU),getBitmap()
,freezeBitmap.setPixel(0, 0, 0)
。所以我想知道:为什么ImageView
没有注意到TextureView.getBitmap
已经更新了位图,但它确实注意到setPixel()
执行了更改?
有没有一种强制更新的好方法?