Android onDraw循环

Android onDraw循环,android,animation,canvas,ondraw,drawbitmap,Android,Animation,Canvas,Ondraw,Drawbitmap,我在Activity类中设置了全局变量x,y 我启动一个线程“t0”,它不断更新全局x和y 我有如下的onDraw伪代码(都在UI线程上):- 我希望看到位图的动画在x轴上的屏幕上移动,每个invalidate()重新绘制新位置。相反,我看到它“跳”到最后一个x位置0(没有中间阶段) 我假设虽然x和y通过t0进行更新,但我并不太担心,因为循环忙于处理原始的x,y值(分配给x0,y0) 我观察到x,y更新,代码在“if循环”中执行(我通过调试看到) 我试着增加延迟,但似乎没有任何区别。我可以让它直

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

我启动一个线程“t0”,它不断更新全局x和y

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

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

我假设虽然x和y通过t0进行更新,但我并不太担心,因为循环忙于处理原始的x,y值(分配给x0,y0)

我观察到x,y更新,代码在“if循环”中执行(我通过调试看到)

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

如有任何提示或提示,将不胜感激

提前谢谢


史蒂夫

我认为你不能在一个
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();
        }
    }
}

我想这里发生的是,中间产物正在被吸引。但是没有足够的时间来展示这些。你必须设置一些线程。在其中睡觉。它会起作用的

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