的Android仿真器中运行它
当我迅速调用 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"one_answers"绘图"交替。在屏幕上快速移动一段时间后,"绘图"消失了,并且函数onDraw
再也不会被调用。
我在针对Android 4.4.2
似乎这是模拟器的错误,我尝试了与Genymotion模拟器完全相同的代码,并且一切正常。尚未弄清楚如何在常规仿真器中修复它,除非每50毫秒左右一次调用invalidate()
一次。