我在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发生到另一个。
任何提示或提示都将不胜感激。
提前致谢。
史蒂夫
答案 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。它会工作。