问题标签 [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.
android - 第二次显示片段时,Android自定义视图会丢失尺寸
我有一个继承自 SurfaceView 的自定义视图。这个视图主要是基于绘图的,它需要知道视图的宽度/高度。尺寸是在 onMeasure 方法期间计算的,并且工作正常。
在 onCreateView 方法期间,我在 Fragment 中膨胀的布局中使用此视图:
由于此应用程序将在手机上运行,因此我一次只显示一个片段,因此我通过在活动中使用 FragmentManager 来“交换”片段。这东西也很好用。问题是这样的: - 第一次显示包含此自定义视图的片段时,它工作正常 - 然后,我显示另一个片段。- 然后,我想再次显示包含自定义视图的片段。此时再次调用onCreateView(见下面的代码),它可以创建自定义视图,但这一次,自定义视图的onMeasure方法没有被调用,因此应用程序因无法检索尺寸而崩溃。
有谁知道为什么?我认为第二次没有解析布局,因此没有计算视图的尺寸(或者我可能误解了一些东西......)
我怎样才能让它工作?我不明白为什么 onMeasure 只在第一次而不是之后被调用。
谢谢您的帮助!
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 的测量宽度呢?
android - 具有纵横比的android布局无法显示指向父级的子级
我试图制作一个RelativeLayout
纵横比为 2:1 的图像。ImageView
布局正在正确调整大小,而且RelativeLayout
看起来也不错。但TextView
不可见,这是因为属性 android:layout_centerInParent="true"
使用任何对齐、居中等属性的父级导致该视图不可见。如何解决?
我的相对布局:
如果我使用的是正方形的纵横比 1:1,那么它都适用于这段代码
android - Android - 列表项上的延迟 setImage 会导致调用 onMeasure 并因此从位置 0 重新绘制所有内容
我有一个列表视图,显示包含来自网络的图像的行。
一旦需要绘制一行Adapter.getView(...)
,我会在后台下载图像并将其设置为ImageView
UI 线程中的 。这意味着位图以延迟的方式设置到 ImageView 中。
我用简单的可绘制资源尝试了延迟的 setImage...() ,结果是一样的。
我观察到以延迟方式设置资源会导致整个列表从位置 0 开始重新绘制,甚至没有显示 - 直到显示的位置。明显的问题是列表滚动缓慢且跳跃且不流畅。
我在这里要格外小心:滚动一点时会发生这种情况。新看到的项目确实被绘制为常规的一部分makeAndAddView
。但是,紧接着所有通向可见行的行都被绘制为measureHeightOfChildren
.
立即设置图像而不是延迟不会导致onMeasure
调用。
那么如何防止重新绘制所有列表,为什么立即 setImage 和延迟之间的行为不同?
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
android - 如何在 Android 中平滑地实现放大缩小?与带有 RTMP 流的 SurfaceView 相关
我正在实现一个可以在使用 SurfaceView 对象播放 RTMP 流时放大或缩小的功能。我做了一些研究,我决定先计算大小和位置,然后使用 onMeasure() 方法重新构建视图。
现在我有一个问题,即对象并没有真正遵循我在缩放期间设置的位置。我想要实现的效果就像这个视频(它显示了我的应用程序的 iOS 版本的行为),我录制了另一个视频来展示我到目前为止所做的事情。如果我使用与 iOS 版本应用程序相同的位置,对象会更频繁地移动。它根本不流畅,可能会导致糟糕的用户体验。
我对这种行为的观察是 SurfaceView 的对象会在触发缩放功能时使用固定位置 x 和 y 重新调整其宽度和高度。然后,对象将向后移动,这可能是由于遵循其父级的布局。我打印了日志消息,发现当 onMeasure() 被触发时位置 x 和 y 会发生变化。虽然我已经在函数中设置了位置,但是当进程转到onLayout()时它仍然会改变。由于 onLayout() 在 onMeasure() 完成后立即被调用,所以我看不到任何可能的时间来设置位置以避免移位。
以下是我所做的: 布局:
和代码:
谁能帮我?如果 SurfaceView 无法实现放大缩小功能,有什么建议的解决方案吗?谢谢。
java - 将高度设置为自定义视图组
我有一个Linearlayout
将一些视图组合在一起的习惯。我希望这Linearlayout
是wrap_content
为了高度。我尝试像这样在 custrucor 中添加布局参数
但它没有效果。高度还在match_parent
。我还尝试onMeasure
根据这样的孩子的身高来计算身高
它也没有任何作用。那么问题出在哪里?
android - Android:以编程方式在自定义视图中设置 match_parent
我实现了一个可以绘画的自定义视图。我想将它设置为 MATCH_PARENT,以便它独立于屏幕方向填充屏幕。当我将方向更改为横向时,它仅填充 50% 的宽度。
我改变了 onMeasure() 但没有效果:
android - onMeasure 尺寸错误
我为我的 ExpandableListView 创建了几个自定义视图。现在我需要将我的可扩展列表视图放在滚动视图中。
ExpandableListView 有自己的滚动功能,并且窗口比我需要的要小(折叠的 ExpandableListView 的大小)。所以我决定使用onMeasure
方法来设置扩展列表的位置。现在一切正常,但我的 ExpandableListView 在大设备和小设备之间有空间,一个列表放在另一个列表上。
现在的问题是:为什么我得到错误的尺寸?
android - 在 onMeasure() 的自定义布局中,textview 是否应该处理它的 layout_height?
我有一个自定义布局,其中包括一些 TextView 和其他小部件。TextViews 有一个 XML 属性 android:layout_height=""。
问题是 layout_height 被忽略了,我认为它被视为 wrap_content。
我认为子视图应该处理自己的 layout_width 和 layout_height 参数。我是否需要在自定义布局的 onMeasure() 中做某事,还是其他地方有问题?
谢谢。