2013-07-31 47 views
2

我在Activity类中设置了全局变量x,y。Android onDraw循环

我开始一个线程“t0”,它不断更新全局变量x和y。

我的onDraw伪代码如下(所有的UI线程): -

View.onDraw(){ 
    if (x,y changed value) { 
     x0=x; 
     y0=y; 
     loop (x0-- until x0==0){ 
      canvas.drawBitmap(bmp, x0, y0, bitmapPaint); 
      invalidate(); 
     } 
    } 
} 

我希望,我看到了位图在屏幕上移动在x轴的动画,用每个invalidate()重新绘制新的位置。相反,我看到它跳转到最后一个x位置0(没有中间阶段)。

我做的是,尽管X和Y通过T0更新,我不是太在意的假设,因为环忙与原来的X,Y值(分配给X0,Y0)。

我观察X,Y更新和码内所执行的“如果环路”(I看到此经由调试)。

我试着添加延迟,但它似乎没有任何区别。我能得到它直接重新绘制到一个新的x,y位置,但我需要通过循环从一个-X0-坐标发生在另一顺利“过渡”。

任何提示或技巧,将不胜感激。

在此先感谢。

史蒂夫

回答

0

我认为你不能在onDraw内引起onDraw。调用invalidate()不仅会导致该onDraw将在当前onDraw完成后调用。我不知道你如何真正实现它,因为它是伪代码,但我想你不希望在的onDraw的循环,但不somethinglike这样的:

View.onDraw(){ 
    if (x,y changed value) { 
     x0=x; 
     y0=y; 
     if (x0!=0){ 
      x0--; 
      canvas.drawBitmap(bmp, x0, y0, bitmapPaint); 
      invalidate(); 
     } 
    } 
} 
0

正在发生的事情在这里,我的猜测是,中间体越来越绘制。但没有足够的时间来展示这些。你必须在其中设置一些thread.sleep。它会工作。