当我快速呼叫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模拟器中运行针对android 4.4.2
的东西答案 0 :(得分:0)
似乎这是模拟器的一个错误,我尝试了与Genymotion模拟器完全相同的代码,一切都运行良好。除非每50毫秒左右不多次调用invalidate()
,否则还没弄清楚如何在常规模拟器中修复它。