问题标签 [onmeasure]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
113 浏览

android - 第二次显示片段时,Android自定义视图会丢失尺寸

我有一个继承自 SurfaceView 的自定义视图。这个视图主要是基于绘图的,它需要知道视图的宽度/高度。尺寸是在 onMeasure 方法期间计算的,并且工作正常。

在 onCreateView 方法期间,我在 Fragment 中膨胀的布局中使用此视图:

由于此应用程序将在手机上运行,​​因此我一次只显示一个片段,因此我通过在活动中使用 FragmentManager 来“交换”片段。这东西也很好用。问题是这样的: - 第一次显示包含此自定义视图的片段时,它工作正常 - 然后,我显示另一个片段。- 然后,我想再次显示包含自定义视图的片段。此时再次调用onCreateView(见下面的代码),它可以创建自定义视图,但这一次,自定义视图的onMeasure方法没有被调用,因此应用程序因无法检索尺寸而崩溃。

有谁知道为什么?我认为第二次没有解析布局,因此没有计算视图的尺寸(或者我可能误解了一些东西......)

我怎样才能让它工作?我不明白为什么 onMeasure 只在第一次而不是之后被调用。

谢谢您的帮助!

0 投票
1 回答
2067 浏览

android - 当 layout_width 为 wrap_content 时如何获取自定义 View 的宽度?

假设我们在 XML 中声明了我们的自定义视图,并且我们覆盖了它的 onMeasure() 方法:

如果设置了 XML 属性android:layout_width="100px",则宽度返回值 100。但如果属性是android:layout_width="match_parent"android:layout_width="wrap_content",则返回 -1 或 -2。那么在这种情况下,我们如何才能得到这个 View 的测量宽度呢?

0 投票
1 回答
79 浏览

android - 具有纵横比的android布局无法显示指向父级的子级

我试图制作一个RelativeLayout纵横比为 2:1 的图像。ImageView布局正在正确调整大小,而且RelativeLayout看起来也不错。但TextView不可见,这是因为属性 android:layout_centerInParent="true"使用任何对齐、居中等属性的父级导致该视图不可见。如何解决?

我的相对布局:

如果我使用的是正方形的纵横比 1:1,那么它都适用于这段代码

0 投票
1 回答
198 浏览

android - Android - 列表项上的延迟 setImage 会导致调用 onMeasure 并因此从位置 0 重新绘制所有内容

我有一个列表视图,显示包含来自网络的图像的行。

一旦需要绘制一行Adapter.getView(...),我会在后台下载图像并将其设置为ImageViewUI 线程中的 。这意味着位图以延迟的方式设置到 ImageView 中。

我用简单的可绘制资源尝试了延迟的 setImage...() ,结果是一样的。

我观察到以延迟方式设置资源会导致整个列表从位置 0 开始重新绘制,甚至没有显示 - 直到显示的位置。明显的问题是列表滚动缓慢且跳跃且不流畅。

我在这里要格外小心:滚动一点时会发生这种情况。新看到的项目确实被绘制为常规的一部分makeAndAddView。但是,紧接着所有通向可见行的行都被绘制为measureHeightOfChildren.

立即设置图像而不是延迟不会导致onMeasure调用。

那么如何防止重新绘制所有列表,为什么立即 setImage 和延迟之间的行为不同?

0 投票
4 回答
6842 浏览

android - SurfaceView onMeasure() 没有通过调用 setMeasuredDimension() 设置测量尺寸

我有一个 SurfaceView。我只是从另一个线程手动绘制它。

它运行良好。但是在平均运行 10-20 分钟后,我得到了这个异常:

Android Documention 说:
测量视图及其内容以确定测量的宽度和测量的高度。此方法由 measure(int, int) 调用,并且应该被子类覆盖以提供对其内容的准确和有效的测量。

正如我认为谷歌的原始实现是这样的:

我不知道我还应该在这里实现什么。

我认为表面视图的大小永远不会改变。

注意:
我的 SurfaceView 包含在 RelativeLayout 中。
异常是由孩子调用的,但它是一个视图(异常中的第 3 行)

如果您知道如何解决这个烦人的错误,请帮助我。

编辑:
在 Activity 的 onCreate 中,我从代码中设置了我的视图(扩展形式 SurfaceView)的大小

回答评论:
这就是我为所需大小设置一些公共字段的方式:

参数初始化:

MyView 是用 xml 编写的。
然后我在上面设置了一些东西:

这整个过程在一开始就发生了。

屏幕永远不会变暗。游戏正在运行,只是异常来了。
我应该在某个地方打电话测量吗?
我不明白为什么过了很久才发生

必须与此相关的其他一些异常:

GAV - 是谷歌分析的东西。

我提出了另一个关于 ANR 的问题:ANR with 3 threads - using locks

0 投票
1 回答
972 浏览

android - 如何在 Android 中平滑地实现放大缩小?与带有 RTMP 流的 SurfaceView 相关

我正在实现一个可以在使用 SurfaceView 对象播放 RTMP 流时放大或缩小的功能。我做了一些研究,我决定先计算大小和位置,然后使用 onMeasure() 方法重新构建视图。

现在我有一个问题,即对象并没有真正遵循我在缩放期间设置的位置。我想要实现的效果就像这个视频(它显示了我的应用程序的 iOS 版本的行为),我录制了另一个视频来展示我到目前为止所做的事情。如果我使用与 iOS 版本应用程序相同的位置,对象会更频繁地移动。它根本不流畅,可能会导致糟糕的用户体验。

我对这种行为的观察是 SurfaceView 的对象会在触发缩放功能时使用固定位置 x 和 y 重新调整其宽度和高度。然后,对象将向后移动,这可能是由于遵循其父级的布局。我打印了日志消息,发现当 onMeasure() 被触发时位置 x 和 y 会发生变化。虽然我已经在函数中设置了位置,但是当进程转到onLayout()时它仍然会改变。由于 onLayout() 在 onMeasure() 完成后立即被调用,所以我看不到任何可能的时间来设置位置以避免移位。

以下是我所做的: 布局:

和代码:

谁能帮我?如果 SurfaceView 无法实现放大缩小功能,有什么建议的解决方案吗?谢谢。

0 投票
2 回答
1119 浏览

java - 将高度设置为自定义视图组

我有一个Linearlayout将一些视图组合在一起的习惯。我希望这Linearlayoutwrap_content为了高度。我尝试像这样在 custrucor 中添加布局参数

但它没有效果。高度还在match_parent。我还尝试onMeasure根据这样的孩子的身高来计算身高

它也没有任何作用。那么问题出在哪里?

0 投票
1 回答
8056 浏览

android - Android:以编程方式在自定义视图中设置 match_parent

我实现了一个可以绘画的自定义视图。我想将它设置为 MATCH_PARENT,以便它独立于屏幕方向填充屏幕。当我将方向更改为横向时,它仅填充 50% 的宽度。

我改变了 onMeasure() 但没有效果:

0 投票
0 回答
340 浏览

android - onMeasure 尺寸错误

我为我的 ExpandableListView 创建了几个自定义视图。现在我需要将我的可扩展列表视图放在滚动视图中。

ExpandableListView 有自己的滚动功能,并且窗口比我需要的要小(折叠的 ExpandableListView 的大小)。所以我决定使用onMeasure方法来设置扩展列表的位置。现在一切正常,但我的 ExpandableListView 在大设备和小设备之间有空间,一个列表放在另一个列表上。

现在的问题是:为什么我得到错误的尺寸?

0 投票
1 回答
388 浏览

android - 在 onMeasure() 的自定义布局中,textview 是否应该处理它的 layout_height?

我有一个自定义布局,其中包括一些 TextView 和其他小部件。TextViews 有一个 XML 属性 android:layout_height=""。

问题是 layout_height 被忽略了,我认为它被视为 wrap_content。

我认为子视图应该处理自己的 layout_width 和 layout_height 参数。我是否需要在自定义布局的 onMeasure() 中做某事,还是其他地方有问题?

谢谢。