问题标签 [android-view-invalidate]
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 - 更新 ListView 页脚
我有ListView
一个页脚View
,其中包含一个TextView
可以根据所选语言动态更改的页脚。
当我选择不同的语言时,我会更新我的ListView
项目:
基础适配器:
为了更新我的页脚,我这样做了:
这不起作用,文本没有改变。但是,如果我将其替换为invalidate();
:
注意:我的ListView
元素是TextViews
根据所选语言翻译的,它们的数量也可以增加或减少。我的页脚永远不会改变,我只想要View
更新以便翻译文本(选择正确的值-(lang)/strings.xml)。
我的问题是,为什么第一种方法不起作用?我能想到的唯一解释是invalidate();
不会setText()
再次调用,它只会重绘View
. 它适用于,ListView
因为适配器再次调用getView()
再次TextViews
填充的地方。这个假设正确吗?
谢谢。
android - 使画布无效,不重绘背景
所以我有一个扩展视图类的类,另一个从外部设备接收数据的类,当新数据进入一个标志时,我在我的视图上调用无效。问题是它重绘了整个画布(在父 draw() 方法中设置新背景),但我希望之前存在的数据保留在画布上,并在有更新时添加到其中。有没有办法将旧数据(线条、位图等)留在画布上,只更新其中的一部分(无需全部重绘——因为我想保持应用程序快速运行并最大限度地减少内存使用)?
android - 为什么部分无效跨越整个视图?
我正在尝试使 android 视图部分无效。我使用 View.invalidate( l, t, b, r ) 并且它似乎正确地使垂直(顶部和底部)值无效,但是,无论我使用哪个左右值,它都会使整个视图无效。
例如,我的视图是灰色的。我希望使绿色区域无效,但是,它使绿色和红色区域无效。它总是跨越整个视图的整个水平方向。我试图输入诸如 View.invalidate( 0, 0, 50, 50 ) 之类的小值,但它仍然会导致这种行为。
为什么会这样?
android - ListView invalidate() 与 invalidateViews() 之间的区别?
ListView.invalidate() 和 ListView.invalidateViews() 有什么区别?
对我来说,单独的 invalidate() 是行不通的。而 invalidateViews() 只是按照我想要的方式工作,即重绘列表项。
android - 在无效之间保持动画状态
我试图在无效后保存视图状态,但我非常不成功。
问题是我有一个图像,用户可以缩放(在右侧或左侧)。在他缩放它之后,应用程序将在某些位置上绘制点,并且在用户单击其中一些之后,我希望它改变(它是带有可选城市的地图)。
问题是,在单击该点后,我需要调用 invalidate() 以再次调用 onDraw() - 以更改该点,但在使地图失效后,它会恢复到其原始状态,因此它再次“未缩放”。您能否告诉我,如何通过 invalidate 方法保留应用于视图的动画状态?
android - 为什么在失效后直接调用requestLayout
我正在学习自定义视图并想了解invalidate()
和requestLayout()
.
请参考这个答案及其图表:
invalidate()
告诉 Android 视图的状态发生了变化,需要重新绘制。
requestLayout()
表示视图的大小可能已经改变,需要重新测量,然后重新绘制。
invalidate()
将调用dispatchDraw()
, draw()
,onDraw()
因此它会重新渲染视图。
requestLayout()
另一方面,几乎可以完成从测量到重新渲染的所有工作。
为什么有这么多示例(甚至是TextView
源代码)调用invalidate()
然后requestLayout()
就在下一行?
android - Android invalidateDrawable()不起作用
我在自定义视图中有一堆可绘制对象。我希望用户能够按下一个或多个可绘制对象并更改颜色。目前,每个可绘制对象都只是StateListDrawable
具有两种状态:state_pressed
和未按下。每次我按下可绘制对象时,setState
都会返回 true,因此我假设它实际上已更改,但我没有看到可绘制图像更改。是invalidateDrawable
不是什么都不做?我究竟做错了什么?如何在按下时重绘一个drawable而不需要customView.invalidate()
每次都调用和重绘整个东西?我最初是这样做的,但发现我的应用程序运行非常缓慢/效率低下。谢谢!
流量:
这是类中按钮触摸的代码TouchKey
(MyTouch 是一个自定义类,用于跟踪 android 设备上的所有触摸):
我是如何StateListDrawable
在我的自定义视图中绘制的:
java - Android 画布滞后
我正在为一个班级创建一个项目,但遇到了一些滞后问题。加载地图后,要么什么都不会发生,因此您必须返回并重新加载它,它会工作一段时间,或者在进行一些移动后,我的手机/模拟器将需要几秒钟,直到您可以进行下一步操作。这就是我设置课程的方式:
我有我的地图类作为主控制器。有不同的地图,但它们的工作原理都是一样的。map 类从布局中设置内容视图,就像普通的具有空的相对布局一样,它创建节点、线并具有游戏规则类来检查玩家执行的不同动作。节点、线条和游戏规则的类扩展了 View,因此在 onDraw() 中,我用定义的坐标绘制正方形并将它们添加到地图类的视图中。根据玩家的行为,线条和节点将调用 postInvalidate() 来更新数字或颜色。在游戏规则类中,它不断检查赢家或输家并显示轮到谁了,但我在 onDraw() 中有 invalidate() ,因此它不断被重绘。绘制了 6 个以上的节点和 10 多条线,游戏规则覆盖了所有内容。
我知道使用 sleep() 并不理想,但是自从创建游戏规则类并在 onDraw() 内部使用 invalidate 以来,我一直在经历这种情况。我在路上,但我可以稍后发布代码。我也被困在这个项目中使用画布,因为没有其他从事这个项目的人接触过 Android。
先感谢您!
TL;DR:如何更好地优化使用画布?
android - 调用 invalidate() 时计时器在 Android 中不起作用
我想通过绘制一条灰色、白色(与背景匹配)然后再次灰色的路径来创建闪烁效果。我想闪 3 次,显示灰色 1 秒,白色 1 秒,灰色 1 秒,等等。
当我创建一个Handler
forpostDelayed()
时,程序跳过了 run() 并没有在时序集中执行它,并且没有发生闪烁:
我将如何使用计时器实现这样的闪烁功能并将其闪烁 3 次?
谢谢!
java - Invalidate 未调用自定义视图类的 onDraw
屏幕是白色的,并且 onDraw 中的 System.out.println() 从未被调用过。
这是我的 activity_main.xml
自定义视图类:
主要活动: