【问题标题】:SurfaceView height and widthSurfaceView 高度和宽度
【发布时间】:2015-02-15 13:15:21
【问题描述】:

我想知道怎么拍

SurfaceView 

我创建的类,并从 SurfaceView 的构造函数中获取表面的高度和宽度。 (以像素为单位的高度和宽度)

我相信这应该很容易,但结果却相当困难。

我知道 Google 不鼓励使用 height 和 width 属性,但我觉得我需要它们。

任何帮助将不胜感激, 谢谢!

【问题讨论】:

  • 如果您可以确定 SurfaceView 的大小,您可以将其传递给自定义构造函数,但您需要动态创建 SurfaceView;即,不在布局 xml 中。否则,视图在布局之前不知道它的大小。

标签: android height width surfaceview


【解决方案1】:

SurfaceView 并不是这样工作的。

SurfaceView 有两部分,Surface 和 View。视图由视图层次结构创建,并受制于通常的布局机制。

Surface 由窗口管理器创建。这需要图形合成器 (SurfaceFlinger) 的 IPC。由于存在延迟的可能,SurfaceView 实例化有一个异步组件,Surface 一般要等到 SurfaceView 构造函数退出后才会存在。

处理这个问题的正确方法是设置SurfaceHolder回调并等待surfaceChanged()方法被调用。回调接受表面宽度和高度作为参数。

您可以在Grafika 中看到一些示例,例如“hardware scaler exerciser”活动跟踪宽度和高度的变化。

【讨论】:

    【解决方案2】:

    试试这样:

    getWindowManager().getDefaultDisplay().getMetrics(metrics); Width = metrics.widthPixels; Height = metrics.heightPixels;

    【讨论】:

    • 这个在 SurfaceView 的构造函数中吗?
    • 这会让你得到显示尺寸。由于屏幕装饰(状态和导航栏),Surface 大小可能会有所不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2016-08-02
    • 2018-10-17
    相关资源
    最近更新 更多