我正在开发一个自定义视图,它在画布上绘制一些瓦片。 这些瓦片从几个文件中加载,并在需要时加载。
它们将由AsyncTask加载。如果它们已经加载,它们将只被绘制在画布上。这部分工作正常!
如果这些图片被加载,AsyncTask将触发view.postInvalidate()。问题在于,我的自定义View 没有每次都触发 onDraw(Canvas canvas) 方法,即使我反复调用 view.postInvalidate()。
view.postInvalidate 只有在第一次加载图片时才会触发 onDraw() 方法,然后只有当我在 CustomView 的 onTouchEvent 中调用 this.invalidate() 时才会触发。
是不是有可能 View 决定是否要重新绘制画布?有没有一种方法可以 强制 View 重绘?我认为 invalidate 方法只是告诉 View 它可以考虑重新绘制。
这些 invalidate 方法有限制吗?
希望你们中的任何人都可以更多地了解这个问题。
编辑:
我刚把所有的 postInvalidate() 都改为 invalidate(),因为所有的图片都是由主线程执行的 AsyncTask 加载。但仍然存在一个问题,即执行 invalidate() 并没有触发 onDraw() 方法。我发现 view.invalidate() 是通过覆盖原始方法来触发的。
@Override
public void invalidate() {
super.invalidate();
Log.d(TAG, "invalidate executed");
}
我现在不知道该怎么办。我正在使用view.invalidate()和view.postInvalidate()这两个方法,但是无论怎样组合都没有用。