问题标签 [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 - 无法使用 invalidate() 重绘我的画布位图;
我的游戏需要帮助!我正在用位图绘制我的 playermodel,我想用 ontouch 事件更改模型,但它不起作用,我不知道,我做错了什么:(首先这里是我的 playerclass 是我' m 创建位图:
这是我的游戏面板代码,我在其中调用我的位图(我只给你这个问题所需的部分):
我只想通过 onTouch 事件更改播放器的图像,但它不起作用。
listview - ListView / GridView 在 Fragment 内不刷新
片段的其他元素得到更新,只有 listview 和 gridview 没有。我可以在日志中看到适配器的内容正在更改,但视图仅在我单击它们或 onResume() 时才会刷新。
我已经在 UIThread、listview.invalidateViews() 和 gridview.invalidateViews() 以及 requestLayout()、requestFocus() 和 performClick() 中尝试了 adapter.notifyDataSetChanged() 和 adapter.notifyDataSetInvalidated(),当我触摸它们时它们会刷新视图区域。
我也尝试过分离/附加片段。
当我再次尝试 gridview.setAdapter 时,内容变为空白并在我单击 gridview 区域时显示为更新。
我正在使用 AndroidAnnotations。
Adapter2 与 Adapter1 相同,但型号和项目不同。这些项目是 @ViewGroups 只是将模型绑定到视图元素。
编辑:现在,最有效的是 requestFocusFromTouch(),但感觉有点小问题。
android - 返回到具有自定义视图的活动时,Invalidate 无法调用 onDraw
我继承了一些代码,因此我没有真正的自由来更改它。:(
我有一个主要活动,从中调用其他活动(从现在起我将这些活动称为子活动)。每当其中一个完成时,它就会调用完成并将数据返回给主活动。
每个活动(包括主要活动)的顶部都有一个显示自定义视图的栏。自定义视图包含一个画布,该画布具有依赖于网络状态的绘图.. 即 wifi/移动等...
由于“状态”数据永远不会改变,它保存在单例中,视图从单例中获取数据以定义它绘制的内容。这是没有问题的,即数据总是如我所料。
当我第一次启动 MainActivity 时,随着网络的变化,数据会发生变化,并且每次调用“无效”视图都会收到对“onDraw”的系统调用,正如我所期望的那样。
在每个子活动中也是如此。
在完成子活动并返回到 mainActivity 后,对 invalidate 的调用不再导致对 onDraw 的调用发生。
我已经看了很长时间了,只是无法弄清楚出了什么问题。
在我的构造函数中,我有:
每当数据更改时,都会调用以下方法:
现在,还有一件事……在立即返回活动时,我刷新并且这确实绘制正确,即无效确实触发了 onDraw 调用……任何后续网络更改(被传播)都无法导致onDraw 调用。
我想知道这是否与视图以某种方式分离有关。我可以看到调用了“onDetachedFromWindow”,但是触发是子活动的破坏,因此我不明白为什么这会影响 MainActivity,但这是我唯一能想到的。
我希望我已经提供了足够的信息来帮助我的人......
android - 如何从另一个类调用 invalidate() 方法?
我正在尝试在我的 Android 应用程序中的自定义视图上实现捏缩放功能。我已经使用以下课程来做到这一点。
我想在invalidate()
内部调用上述方法,onScale
但这是错误的,因为这在我的自定义视图之外。但是,我尝试通过在此处实例化自定义视图来做到这一点,如下所示。
但是这个也返回一个错误。无法实例化我的自定义视图。那么如何在这里调用 invalidate() 方法呢?
java - OnDraw() 仅在循环后调用一次
我有一个我正在 android studio 中编写的程序,它应该播放一个音符,并根据坐标、歌曲音符名称和播放音符的时间的数组列表扩大一个圆圈的大小。但是,我遇到的问题是所有音符都正确播放,但只有最后一个圆圈被绘制,并且在我退出播放所有音符的循环之后。我以前查过这个问题,我得到了一些关于调用的答案setWillNotDraw(false);
,但是我在构造函数中调用了它,但我仍然遇到同样的问题。我试过invalidate();
在多个不同的地方打电话,但似乎没有任何效果。任何帮助将不胜感激!
我的代码:
构造函数
抽奖时
播放音符的循环 - 我已经检查过,所有圆坐标和音符都包含在正确的数组中:
播放音符和声音的代码:
应该播放动画但仅onDraw();
在循环退出后调用的代码
playNote、playSound 和 generateColor 方法
谢谢!
android - Invalidate() 不调用 onDraw
昨天我问了一个关于 Android 图形的问题,现在我已经启动并运行了基础,我已经在我的自定义视图类中创建了一个渲染循环。
这是绘制我的播放器图像的代码(如果我绘制一次而不是循环绘制它就可以工作。)
在 onDraw 里面:
如果我只渲染播放器并调用invalidate()
一次,而不是循环多次,它显示得很好(而且花花公子)。但是,当我将它放在循环块中时,它不会呈现。
根据我的日志,循环是函数式的并且调用invalidate()
,但它在循环期间从未真正进入onDraw
方法。
如果有人可以解释为什么会发生这种情况,那将非常重要,如果您需要更多信息,请告诉我,我会提供。
编辑: 在我的主 Activity 类中,我有一个用于游戏逻辑的线程,然后在启动逻辑线程后使用主线程进入渲染循环。
我尝试使用我的主线程创建一个单独的线程来渲染和进入游戏循环,但这仍然不起作用。
android - 在运行时无法更改自定义视图的可绘制矢量
我已经实现了一个自定义视图,它看起来像一个搜索栏,在Custom Score bar末尾附加了可绘制对象。我提供了更改进度颜色、更改进度宽度(以及火箭图标)和更改图标本身(用于不同颜色)的方法。
}
现在我在活动中将它实例化为:
如果我没有在活动中设置指示器图标,则会显示图标,但只要我调用setIndicatorIcon()方法,图标就会消失。我错过了什么?
android - invalidate() doesn't refresh View
i'm struggling with this for a while, not sure if because almost 2 years of absence in Android DEV or my stupidity, I've tried everything and just cannot redraw my screen even if invalidate() is happening. Here's some code:
GameActivity.java
CanvasActivity.java
movePlayer
So basically, when We swipe to the top, position is being changed by movePlayer (decreasing y in 2d array). Then, every rectangle on screen is being redrawn (whole screen has only rectangles which are drawn with different colors according to array line by line, doesn't matter I suppose). My variables are changing properly, so invalidate() is firing onDraw(), however there's no change on the screen. Any help much appreciated.
android - 仅更新视图的一部分而不使用 invalidate(Rect)
在我当前的应用程序中,我使用 invalidate(Rect) 来更新我当前视图的一部分,但从 API 28 开始,此方法已被弃用。
所以我的问题是:
1.有没有其他方法可以只更新一部分视图?
2.使用不推荐使用的方法有什么后果?
android - 你如何使片段视图无效?
好的,所以我有一个显示用户帐户信息的片段。
它的工作方式是它发出一个可能会或可能不会触及服务器的请求,具体取决于已经缓存的信息。
当信息可用时,片段将在其中更新其文本字段的回调。
然而,此时用户界面需要刷新,所以我想发出某种invalidate
...
除了那完全没有任何作用。
首先,我注意到this.view
return null
。因此,我不依赖于此,而是onCreateView
明确存储我创建的视图。
然后在我更新了文本字段之后,我打电话给fragmentView.postInvalidate()
... 什么都不做。
我也试过doAsync { uiThread { fragmentView.invalidate() } }
......这也无济于事。
然后我找到了这个答案并尝试了
...这比什么都不做更糟糕,因为如果您切换到不同的片段并返回,其他两种方式至少会更新视图,而这将永远拒绝显示任何有用的信息。
所以也许我可以通过延迟调用来“作弊”,super::setUserVisibleHint
直到我更新了值......不,我不能。
不过,我能做的是,我可以通过烘烤一些东西来强制重绘 ui。这就是我目前正在做的事情。但是,这仍然不能成为解决方案。
如何获得正确的 ui 刷新?
哦,这是一个android.support.v4.app.Fragment
,我正在使用一个android.support.v4.app.FragmentStatePagerAdapter
在片段之间切换,如果这很重要的话。
完整片段代码: