【发布时间】:2017-01-10 12:44:37
【问题描述】:
我目前正在开发一个在画布上绘制一些图块的自定义视图。 这些图块是从多个文件中加载的,并会在需要时加载。
它们将由 AsyncTask 加载。如果它们已经加载,它们只会被绘制在画布上。 这工作正常!
如果加载了这些图片,AsyncTask 将触发 view.postInvalidate() 问题是每次我触发 view.postInvalidate() 时,我的自定义视图 没有触发 onDraw(Canvas canvas)。
view.postInvalidate 仅在加载图片时触发 onDraw() 方法第一次,然后仅当我在内部的 onTouchEvent 中触发 this.invalidate() 时我的自定义视图
视图是否有可能决定是否再次绘制画布? 有没有办法强制视图重绘?我认为 invalidate 方法告诉 View 如果 View 考虑重绘会很酷-.-
这些无效方法是否有限制?
我希望你们中的任何人都知道这个问题。
编辑:
我只是将 every postInvalidate() 更改为 invalidate() 因为图像都是由从主线程执行的 AsyncTask 加载的 但是仍然存在执行的 invalidate() 没有执行 onDraw() 方法的问题。 我发现 view.invalidate() 是通过覆盖原始方法触发的:
@Override
public void invalidate() {
super.invalidate();
Log.d(TAG, "invalidate executed");
}
我现在不知道该怎么办。我正在触发 view.invalidate() 和 view.postInvalidate() 但绝对没有任何组合。
【问题讨论】:
标签: java android view android-canvas invalidation