我有一个包含用户的绘图视图。当点击“播放”按钮时,我想要一个从开始到结束绘制图像的循环。Android的 - 触发一个循环,在听众多次重绘(力无效即使UI线程繁忙)
在试图做到这一点我基本都播放按钮,基本上无效的观点,等待一个onClickListener的内部循环,将下一个点的集合,并再次无效。
的问题是图像实际上并不重绘,直到之后的整个图像绘制。所以基本上什么都没有发生,然后突然完成。之后做一些研究,我的假设是无效说的是主UI线程重绘时,得到的时间,但它已经挂了对付监听器,所以它实际上并没有画,直到循环结束。我试过直接调用onDraw,使用postInvalidate,以及其他我可以想到的荒谬的事情,但我不知道如何让这个工作。
下面是一些代码片段:
在我PaintActivity(其中有一个PaintAreaView) 洗涤器指示绘制的进度。当我手动使用搜索栏时,onProgressChanged中的第一行可用,但在按下play时不起作用,这就是为什么我尝试添加所有额外内容的原因。
_scrubber.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
_paintAreaView.setPointsToDraw(_scrubber.getProgress());
_paintAreaView.invalidate();
_mainViewGroup.invalidate();
_paintAreaView.postInvalidate();
_mainViewGroup.postInvalidate();
_paintAreaView.drawPoints(_paintAreaView.getCanvas());
_paintAreaView.invalidate();
}...
我的播放按钮的东西:
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
...
playDrawing();
...
}
});
private void playDrawing()
{
int endPoint = getPaintPointCount();
while(_scrubber.getProgress() < endPoint)
{
_scrubber.incrementProgressBy(1);
try{
Thread.sleep(10);
}catch(InterruptedException e)
{
Thread.currentThread().interrupt();
}
//_paintAreaView.setPointsToDraw(_scrubber.getProgress());
//_paintAreaView.invalidate();
//_mainViewGroup.invalidate();
if(_isPaused)
break;
}
}
我不使用的睡眠一个巨大的风扇,但我已经与其他解决方案挣扎,这就是我接下来要做的研究。但对于这个问题,增加进度条没有成功调用onProgressChanged,但同样它只是不绘制视图,直到它的是播放键点击监听器的。
如果我不得不等待,直到我离开听众才能使其工作,我已经足够新了,我不知道我会如何处理这个问题。
对不起,我糟糕的代码,任何的帮助深表感谢帮助我了解这里发生了什么,我需要了解得到这个工作是什么。
谢谢!