我有一个ImageViews的ViewPager,我覆盖了ImageViews的onDraw(..)
,以便我在imageview上绘制内容。在应用程序运行期间,我更改了这些图纸,因此我手动调用invalidate()
使onDraw()
被调用(从而更新图纸)。
奇怪的是,调用的唯一onDraw()
是第一个ImageView,而不是其他。 (仅对首先显示的ImageView有意义。滚动到下一个ImageView后,onDraw()
停止被调用)
我在ImageView的构造函数中调用了setWillNotDraw(false)
。
有没有人有同样的经历?为什么会这样?
答案 0 :(得分:0)
可能未为ImageView调用onDraw方法的一个原因是,如果您尚未设置图像资源(即ImageView src参数)。如果您以编程方式进行设置,则可以通过调用setImageResource来完成。确保您正确指定了图像资源并且该资源存在。
我发现了此问题,因此制作了一个自定义控件来显示动画GIF。对于sdk <版本28,我使用android.graphic.Movie完成此操作,对于sdk> =版本28,我使用了新的ImageDecode。为了完成我的自定义控件必须从ImageView扩展。当我这样做时,我的onDraw方法不再被调用。当我设置图像资源时,问题消失了。在使用Movie渲染GIF的情况下,实际上并没有使用ImageView进行渲染,但是我仍然必须为Image view提供一个虚拟图像资源,以便可以调用onDraw方法。使用Invalidate和SetWillNotDraw(false)方法将无法解决此类问题。