Android onDraw循环
我在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坐标到另一个坐标进行平滑的“转换” 如有任何提示或提示,将不胜感激 提前谢谢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循环”中执行(我通过调试看到) 我试着增加延迟,但似乎没有任何区别。我可以让它直
史蒂夫我认为你不能在一个
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();
}
}
}