当我快速调用 invalidate()
时(例如响应触摸事件),在某个时刻 onDraw()
停止被调用。下面是一些重现该问题的简单代码:
public class TestView extends View {
public TestView(Context context) {
super(context);
}
public TestView(Context context, AttributeSet as) {
super(context, as);
}
public void onDraw(Canvas c) {
Log.d("tag", "drawing");
}
public boolean onTouchEvent(MotionEvent event) {
Log.d("tag", "touchevent");
invalidate();
return true;
}
}
当您单击并拖动时,最初您会在日志中交替看到“touchevent”和“drawing”。在屏幕上快速移动一段时间后,“绘图”消失,并且函数 onDraw
不再被调用。
我正在针对 android 4.4.2 的 Android 模拟器中运行内容
最佳答案
这似乎是模拟器的一个错误,我已经在 Genymotion 模拟器上尝试了完全相同的代码,一切都运行良好。还没有弄清楚如何在常规模拟器中修复它,除非每隔 50 毫秒左右调用 invalidate()
一次以上。
关于java - invalidate() 不会导致调用 onDraw(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21566269/