【问题标题】:Video not scaling when SurfaceView is scaled缩放 SurfaceView 时视频不缩放
【发布时间】:2014-11-05 09:37:50
【问题描述】:

我正在surfaceView 中播放视频。当我缩放 surfaceView 时,它的坐标被正确缩放,但正在播放的视频内容不是。

我正在使用 ViewHelper.setscaleX 方法缩放视图。 我尝试了几件事,但无法缩放视频..如果我更改参数,那么视频会正确缩放。但这使得过渡缓慢。 请查看初始视频和最终视频的快照(缩放后)。

【问题讨论】:

  • “如果我改变参数然后”参数?什么参数?
  • 视图的LayoutParams,改变视图的宽度和高度。
  • 有关调整 SurfaceView 表面大小的示例,请参阅 Grafika 中的 AspectFrameLayout (github.com/google/grafika/blob/master/src/com/android/grafika/…)。它在那里用于调整大小以匹配视频播放的宽高比,但应该是自适应的。

标签: android video scale surfaceview android-videoview


【解决方案1】:

解决了。使用 TextureView 而不是 SurfaceView。动画在表面视图上不起作用。使用此链接使用 textureView 播放视频:Playing video on TextureView

【讨论】:

    【解决方案2】:

    请注意,TextureView 会比 SurfaceView 消耗更多电池,因为它使用 openGL 绘制视频,而 SurfaceView 可以使用硬件覆盖(如果可用)。

    正如其他人在 cmets 中所说,您可以通过修改视图的 layoutParams 来实现您想要的。

    【讨论】:

    • layoutParamssetScale... 消耗更多的 CPU,因此动画将以非常低的 fps 运行
    【解决方案3】:

    如果您因为使用第三方库或诸如此类的东西而不得不坚持使用 SurfaceView,则解决方法是使用缩放动画将其缩小,并且在动画完成后,通过提供更新 SurfaceView 的布局参数正确的尺寸和位置。它并不完美,但应该适合那些别无选择的人。

    【讨论】:

    • 您还需要将比例设置回 1,否则视图将以布局参数设置的正确宽度/高度显示,但在动画后缩放到设置的比例。
    【解决方案4】:

    像相对布局一样在surfaceview上方添加一个透明视图,并在该透明视图上添加scalegesture检测器,当缩放发生时,只需在surfaceview或textureview上执行缩放。

    假设透明视图被命名为videoview

    Videoview.setOnClicklistner();
    

    当执行缩放时,实现 scalefactorsurfaceview 之类的

    Surfaceview.setscaleX(scalefactor);
    Surfaceview.setscaleY(scalefactor);
    

    一切顺利

    【讨论】:

    • 嘿,setScale 方法总是以中心为中心进行缩放,有什么办法可以将其更改为屏幕的中心焦点
    猜你喜欢
    • 2015-07-24
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    相关资源
    最近更新 更多