gpt4 book ai didi

android - 如何在执行下一行代码之前强制 View 重绘

转载 作者:IT老高 更新时间:2023-10-28 23:07:06 33 4
gpt4 key购买 nike

我有一个 LinearLayout,我想更改单击其 subview (ImageButton)之一时的背景颜色。我能够做到这一点,但不能立即做到这一点 - 直到稍后(我认为在 onResume 调用期间)才会在屏幕上发生更改。我想了解如何在设置背景后,在执行下一行代码之前强制重新绘制布局。这是按钮的 OnClickListener 的 onClick 方法:

public void onClick(View v) {

LinearLayout parentLayout = (LinearLayout) v.getParent();
parentLayout.setBackgroundResource(R.color.my_color);
SystemClock.sleep(1000); //ms

}

sleep 命令用于测试重绘是在它之前还是之后发生。结果:之后。关于这个主题的大多数问题(如 herehere )都说在 View 上使用 invalidate() 。我使用了命令 parentLayout.invalidate();parentLayout.postInvalidate();parentLayout.refreshDrawableState();背景和 sleep 线,都无济于事。重绘仍然在 sleep 命令之后发生。谁能告诉我如何让它立即发生?

其他可能有用的信息:LinearLayout 绑定(bind)到 ListView 的行,上面的 OnClickListener 在扩展 SimpleCursorAdapter 的自定义类中,而不是在 Activity 本身中。 (这样我可以为 ListView 中的每一行设置一个监听器。)

最佳答案

您可以尝试在 forceLayout() 之后立即调用 draw(canvas)。如果您没有覆盖 onLayout()onMeasuredraw()onDraw(),则默认实现将运行。唯一的问题是您必须获取 Canvas 或手动创建一个。

强烈建议不要采用这种方法,因为 Android 专门设计用于避免在正常更新之外进行绘制。虽然您认为 invalidate() 不会立即发生是正确的,但它是鼓励重绘的最安全和最好的方法。如果您想在更新之外处理绘图,Android 提供了一种使用 SurfaceHolder 类的方法。

关于android - 如何在执行下一行代码之前强制 View 重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8754709/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com