问题标签 [viewgroup]
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 - 滚动视图时的闪烁问题
我正在尝试将基于Marc Reichelt工作的 RealViewSwitcher 转换为使用 ListAdapter 备份的一个。一个水平可滚动的 ViewGroup,包含多个视图,一次可见一个。
我当前的解决方案一次最多向 ViewGroup 添加 3 个视图。一个(中间)可见,两个缓冲视图,每侧一个。当用户滚动时,比如说向右滚动,最左边的 View 会被移除,而新的 View 会被添加到右边。为了让 ViewGroup 可以左右滚动,我需要始终关注中间的 View。因此,当切换视图时,我会正确排列视图并将焦点设置在中间的视图上。这种方法的问题是在排列视图时会出现闪烁效果。让我用我画的一张图来说明这个问题:
A、B 和 C 是我的 ViewGroup 中的三个不同视图(支持 ViewGroup 的 ListAdapter 包含更多元素,但一次只加载三个)。较大的矩形表示此时焦点所在的位置。我向左滚动并在 (3) 处捕捉到最左侧视图的目的地。然后我重新排列视图。即在左侧添加一个新视图 X,并在右侧删除视图 C,将 A 放在中间。最后,我以中间的视图 (A) 为中心,这是我从一开始就滚动到的视图。
因此,当我最后一次重新排列视图并以 A 为中心时,之前位于中间的视图(在本例中为 B)的内容会闪烁几毫秒,从而导致不需要的闪烁效果. 关于我如何解决这个问题的任何想法?
android - 自定义 ViewGroup 中的视图在大小更改后未呈现
我遇到了一个让我难过的问题,我希望有人能给我一些指示。
我正在开发一个使用自定义 ViewGroup(实际上是包含 RelativeLayout 的 FrameLayout)来呈现事件日历的应用程序。日历中的事件表示为根据事件的持续时间和包含视图的大小调整大小的视图。
我遇到了在调整包含 FrameLayout 大小时发生的问题。当前的实现删除了所有代表事件的视图,并尝试添加新的视图并根据 FrameLayout 的当前大小计算它们的大小。这项工作是通过 View 的 onSizeChanged() 方法触发的,该方法在 FrameLayout 中被覆盖。
调整视图大小时,将执行此代码并更新视图,但是,它们实际上都没有呈现在屏幕上…… FrameLayout 中包含的视图根本不可见。如果我在层次结构查看器工具中加载视图,它们是视图树的一部分,并在概述中它们应该在的位置上概述,但它们不显示。(请注意,视图在 FrameLayout 的初始渲染中可见......只有在调整大小后它们才会消失。)
调整大小期间的事件顺序似乎如下:
重置视图(在 onSizeChanged() 内部)后调用 requestLayout() 似乎没有效果。但是,如果我在调用 requestLayout() 之前造成一些延迟,视图就会变得可见。我可以通过产生一个线程并休眠来导致这种延迟,或者通过创建一个简单地调用 requestLayout() 并在自己调整大小后按下它的虚拟按钮,或者甚至是放在 onSizeChanged() 末尾的这个丑陋的 hack:
当我使用这个 hack 时,包含的视图是可见的,并且事件的顺序如下:
因此,似乎强制第二次测量通过(在修改视图树之后)会使包含的视图按应有的方式可见。为什么延迟对 requestLayout() 的调用对我来说是个谜。
任何人都可以提供任何关于我做错了什么的指示吗?
我意识到如果不查看一些代码,这有点难以理解,所以我创建了一个小示例应用程序来展示我的问题并在 Github 上提供:
https://github.com/MichaelSims/ViewGroupResizeTest
我上面提到的黑客致力于一个单独的分支:
https://github.com/MichaelSims/ViewGroupResizeTest/tree/post-runnable-hack
如果我可以提供任何其他信息,请提前告诉我并感谢。
android - 从非 xml 内容视图中关闭对话框
我有一个自定义对话框(扩展对话框),其内容视图是自定义视图组。视图组有几个 edittext 子项,但我自己在视图组的 dispatchDraw 和 onTouch 方法中处理按钮的绘制和单击(我试图避免膨胀尽可能多的视图)。具体来说:这个视图没有我可以设置为对话框的关闭按钮的按钮子项。我想从 viewgroup 的 onTouch 方法中关闭对话框,但除了模拟按下后退键之外,我不知道该怎么做。
活动代码:
对话代码:
视图组代码:
我能想到的唯一其他方法是使用dismissDialog(int) 方法,这意味着覆盖onCreateDialog 和onPrepareDialog 事件处理程序。但是如何从视图的 onTouch 方法中调用dismissDialog?
也许我需要设置某种监听器?如果是这样,执行此操作的骨架代码是什么?
android - ViewGroup 异常:参数必须是该视图的后代
我正在查看用户的异常日志,发现了这个常见的异常:
有什么方法可以优雅地处理这个异常并防止强制关闭?我无法重现该问题。
我发现这个谷歌线程是关于它是甜甜圈(1.5)的一个问题,它已被修复。但我是从使用更高版本 Android 的用户那里得到的。我的最小 API 是 1.6,目标是 2.2。
java - 动态添加按钮到fingerpaint android api演示
现在我想在 FingerPaint api 演示中动态添加按钮。但问题是我不熟悉在 java 文件中动态创建布局。有人知道我如何实现这个类来在标题栏中添加按钮吗?任何代码示例将不胜感激。
android - 具有动画视图的自定义视图组
我做了一个自定义视图组,我需要使用视图动画来旋转一些视图......
但是它们行为不端,无论我将 startanimation 放在 onDraw、onLayout 还是 onMeasure 中,我的视图都会闪烁(您会看到它们短暂旋转,然后短暂不旋转,并且该模式重复)。
我该如何解决?
android - 蒙版触摸手势 - android
好的,让我们把它变成基本的,我有三个pages
( viewgroups
),我可以像主屏幕一样滚动浏览。其中之一pages
是画廊。现在的问题是pages
要更改为画廊案例上的任何滑动。是否可以将 trouch 手势限制在视图组的某个部分?
任何帮助表示赞赏。谢谢!
android - 自定义视图组上的九个补丁
我制作了一个九补丁和一个自定义视图组,然后我将该视图组的背景设置为九补丁。
问题是:九个补丁忽略了“内容区域”的设置。
那么:如何在自定义视图中正确使用九补丁?
或者:
我如何从九个补丁中获取内容区域,以便可以在 OnMeasure 和 OnLayout 数学上使用它?
android - Android在onlayout方法中调整另一个视图的大小
我遇到了这个问题:我有一个自定义视图组来处理我渲染相机预览的表面视图。在 onLayout 方法上,我调整了这个 surfaceView 的大小以正确显示相机。
此自定义视图组位于我要在相机预览上方渲染的图像后面的相对布局中。
现在,我想在调整相机 surfaceView 的大小时调整 FrameImage 的大小,以便图像始终恰好位于相机的顶部。这发生在 onLayout 方法中。我在调整 surfaceView 大小的同时调整 ImageView 的大小(在属性 _viewToUpdate 中):
现在这有一个令人惊讶的行为:
- 相机表面视图在活动启动时正确调整大小
- FrameImage 未调整大小。但是,我确信(感谢日志)_viewToUpdate 不为空。
- 如果在第二秒之后,使用 onClick 事件,我在自定义 ViewGroup 上调用 requestLayout() 以重新计算 surfaceView 和 FrameImage 的大小,然后它将正确调整 FrameImage 的大小。
我需要根据相机大小在活动启动时调整此 FrameImage 的大小。我不明白为什么它不与我当前的代码......我该怎么办?
android - 将视图添加到 ViewGroup 时可以跳过 onMeasure 吗?
已回答
我有一个 RelativeLayout,当用户垂直或水平滚动时,我会在其中动态添加视图。我推出了自己的 ViewRecycler,因为可能有数千个视图可以组成整个可以滚动的内容,但我在任何时候只显示 30 个左右。想想日历的放大视图。
当我添加即将看到的视图时,我遇到了性能问题,在 RelativeLayout 上调用 onMeasure 级联到 onMeasure 在它的所有子视图上调用。我已经计算出 RelativeLayout 的大小,并且已经在它的 LayoutParameters 上设置了它,因此不需要测量 ViewGroup,也不需要重新测量已经添加的 Views 的最终大小和新的添加的视图与这些视图无关。
演示该问题的简单示例是将视图添加/删除到 RelativeLayout 并观察 onMeasure 被调用,尽管它不会影响 RelativeLayout 的大小或其他视图的位置。
主要的.xml
我的活动.java
运行此程序,您将看到对 onMeasure 的 2 次初始(预期)调用,然后每次通过单击按钮添加/删除视图时调用一次。这显然运行良好,但是您可以看到在嵌套视图的复杂布局时不断调用 onMeasure 可能会出现问题。
有没有推荐的方法来绕过这些 onMeasure 调用或至少 onMeasure 调用 measureChildren?