invalidate()没有导致调用onDraw()

时间:2014-02-05 00:16:34

标签: java android graphics

当我快速呼叫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

的东西

1 个答案:

答案 0 :(得分:0)

似乎这是模拟器的一个错误,我尝试了与Genymotion模拟器完全相同的代码,一切都运行良好。除非每50毫秒左右不多次调用invalidate(),否则还没弄清楚如何在常规模拟器中修复它。