2

我在 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)。

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

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

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

提前致谢。

史蒂夫

4

2 回答 2

0

我猜这里发生的事情是,中间人正在被吸引。但是没有足够的时间来展示这些。你必须在里面设置一些 thread.sleep 。它会起作用的。

于 2013-08-10T10:22:57.773 回答
0

我认为你不能onDrawonDraw. 仅调用将在当前完成后调用的invalidate()原因。我不确定您是如何真正实现它的,因为它是伪代码,但我想您不希望 onDraw 中的循环,而是执行以下操作:onDrawonDraw

View.onDraw(){
    if (x,y changed value) {
        x0=x;
        y0=y;
        if (x0!=0){
            x0--;
            canvas.drawBitmap(bmp, x0, y0, bitmapPaint);
            invalidate();
        }
    }
}
于 2013-07-31T11:11:56.877 回答