我使用textview通过翻译实现了自动收报机 使用setX()方法的textview。
在imageview上我必须显示多个 图像,一个接一个地翻转。
因为两者都必须并行和连续运行。
我使用处理程序而不是使用线程来实现它。
TickerHandler ,在几秒钟后连续更新setX()值,因此效果类似于生成工作正常。
new Handler() {
@Override
public void handleMessage(Message msg) {
currentX = tv.getX();
if ((currentX + 10) > 600) {
tv.setX(10);
}
tv.setX(currentX + 5);
this.sendEmptyMessageDelayed(0, 50);
}
}.sendEmptyMessage(0);
FlipHandler ,在imageview上更新新图片,翻转图片,工作正常。
new Handler() {
@Override
public void handleMessage(Message msg) {
imgV.setImageResource(images[imgCount % 5]);
imgCount++;
if (imgCount > 5) {
imgCount = imgCount % 5;
}
this.sendEmptyMessageDelayed(0, 500);
}
}.sendEmptyMessage(0);
同样在线程中,因为android不允许其他线程与UI通信。因此,runOnUiThread必须与UI通信。
自动收报机和图像翻板都正常工作。
Q>当图像发生变化时,股票代码被卡住了几毫秒,由于股票行情不顺畅,股票代码会产生抽搐效应。
对此我有什么想法可以克服这种情况。
感谢;
答案 0 :(得分:2)
这两种方法最终都会在UI线程上使用处理程序:如果当前线程不是UI线程,runOnUiThread()
会将runnable发布到UI线程处理程序。
当处理程序处理消息时,"显然"它无法处理其他消息。
你可以改变以使事情更顺畅的事情:
使用animations framework代替动画而不是自定义处理程序消息。
卸载位图I / O并解码为后台线程。在UI线程中,只需将预解码图像位图切换到图像视图。 Reference