Android onDraw循环

时间:2013-07-31 10:53:23

标签: android animation canvas ondraw drawbitmap

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

我开始一个线程" 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)。 / p>

我观察到x,y更新,代码在' if循环中执行' (我通过调试看到了这一点。)

我尝试添加延迟,但它似乎没有任何区别。我可以让它直接重新绘制到一个新的x,y位置,但我需要一个平滑的过渡'通过循环从一个x0-coord发生到另一个。

任何提示或提示都将不胜感激。

提前致谢。

史蒂夫

2 个答案:

答案 0 :(得分:0)

我认为你不能在onDraw内导致onDraw。仅调用invalidate()会导致在当前onDraw完成后调用onDraw。我不确定你是如何真正实现它的,因为它是伪代码但我想你不想在onDraw中使用循环但是做类似的事情:

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

答案 1 :(得分:0)

我想这里发生了什么,中间体正在被吸引。但没有足够的时间来展示这些。你必须在里面设置一些thread.sleep。它会工作。