java - invalidate() 不会导致调用 onDraw()

标签 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 4.4.2 的 Android 模拟器中运行内容

最佳答案

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

关于java - invalidate() 不会导致调用 onDraw(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21566269/

相关文章:

java - 具有不同参数的策略模式

Java:在参数中传递指针中的对象(通过引用传递)

android - 在android中解析文本文件

android - 终止 Activity 后计时器的生命周期

java - 使用 java.awt.BasicStroke 制作虚线动画

java.lang.NoSuchFieldError : IBM_JAVA for a simple hbase java client in Eclipse 错误

java - Jackson ObjectMapper 无法反序列化 POJO,抛出异常 : No suitable constructor found for type [. ..]:无法从 JSON 对象实例化

java - 如何修复 'android.os.NetworkOnMainThreadException' ?

java - 单击鼠标后绘制椭圆

java - 即使声明为最终边界也会更新