gpt4 book ai didi

android - CameraX beta03 和 Bottom Sheet 滚动问题

转载 作者:行者123 更新时间:2023-12-03 10:11:36 29 4
gpt4 key购买 nike

我正在升级 cameraX alpha1.0.0-beta03在我的项目中。我关注 this .一切正常,我能够按预期拍摄图像。

但我在相机 fragment 中有一张 Bottom Sheet 。在我实现了 beta03 之后,在滚动 Bottom Sheet 时,它似乎被一些不可见的 View 重叠,如下所示:

enter image description here

调试一段时间后发现只有当我通过 camera?.cameraInfo 时才会发生这种情况至viewFinder.createSurfaceProvider .如果我通过 null,则不会发生此问题。但我不知道这意味着什么。

preview?.setSurfaceProvider(
viewFinder.createSurfaceProvider(camera?.cameraInfo))

当我在这里传递 null 时, Bottom Sheet 完全出现。

这就是文档所说的:
/**
* Gets the {@link Preview.SurfaceProvider} to be used with
* {@link Preview#setSurfaceProvider(Executor, Preview.SurfaceProvider)}.
* <p>
* The returned {@link Preview.SurfaceProvider} will provide a preview
* {@link android.view.Surface} to the camera that's either managed by a
* {@link android.view.TextureView} or {@link android.view.SurfaceView}. This option is
* determined by the {@linkplain #setPreferredImplementationMode(ImplementationMode)
* preferred implementation mode} and the device's capabilities.
*
* @param cameraInfo The {@link CameraInfo} of the camera that will use the
* {@link android.view.Surface} provided by the returned
* {@link Preview.SurfaceProvider}.
* @return A {@link Preview.SurfaceProvider} used to start the camera preview.
*/

我在google的示例应用程序中添加了一个随机 Bottom Sheet 并推送它 here(Github link)重现了该错误。 (请构建 Cameraxbasic 模块。我的分支是 Bug_repro_bottomsheet )

有人可以解释发生了什么以及如何解决这个问题吗?

注意:我尝试更新 Bottom Sheet 的 z-index 和高度。它没有用

最佳答案

PreviewView.createSurfaceProvider() 的文档状态:

The returned Preview.SurfaceProvider will provide a preview Surface to the camera that's either managed by a TextureView or SurfaceView. This option is determined by the preferred implementation mode and the device's capabilities.



请注意,预览图面是否由 TextureView 管理。或 SurfaceView部分取决于 CameraInfo您传入 PreviewView.createSurfcaeProvider() 的实例.
  • 如果你传入 null , PreviewView使用 TextureView默认情况下。
  • 如果你传入一个非空的 CameraInfo例如,PreviewView将尝试使用 SurfaceView , 但会退回到使用 TextureView在某些设备上,例如旧设备、在 API 级别 24 或更低级别上运行的设备等。

  • 回到您看到的问题,当您传入非空 CameraInfo 时,就会发生这种情况。例如,可能是因为您测试的设备支持 SurfaceView好吧,所以 PreviewView使用它。

    当您拉起底部的纸张时,它会停在 SurfaceView 的位置。结束。即使 SurfaceView似乎占据了整个屏幕,它只占据了它的一部分(从屏幕顶部到 Bottom Sheet 停止点的矩形),那是因为 SurfaceView被放大以填满整个屏幕( PreviewView 在内部调用方法 SurfaceView.setScaleX()PSurfaceView.setScaleY(),导致预览拉伸(stretch),但是 SurfaceView 的边界,也就是它在 View 层次结构中占据的矩形,不变)。

    通过 documentation SurfaceView,你会看到:

    The surface is Z ordered so that it is behind the window holding its SurfaceView; the SurfaceView punches a hole in its window to allow its surface to be displayed.


    SurfaceView不像你典型的 View ,它的处理/渲染方式与普通 View 不同,并且它的表面存在于一个单独的层上,独立于用于渲染 View 的图形层等级制度。所以如果你打算有其他 View s 在预览顶部滚动,您可能需要强制 PreviewView使用 TextureView管理预览表面。您可以通过 null 来执行此操作。至 PreviewView.createSurfaceProvider() , 或调用 PreviewView.setPreferredImplementationMode(ImplementationMode.PreviewView) .

    您可以阅读有关 PreviewView 的更多信息 here .

    关于android - CameraX beta03 和 Bottom Sheet 滚动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61952777/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com