我有一個包含用戶的繪圖視圖。當點擊「播放」按鈕時,我想要一個從開始到結束繪製圖像的循環。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,但同樣它只是不繪製視圖,直到它的是播放鍵點擊監聽器的。
如果我不得不等待,直到我離開聽衆才能使其工作,我已經足夠新了,我不知道我會如何處理這個問題。
對不起,我糟糕的代碼,任何的幫助深表感謝幫助我瞭解這裏發生了什麼,我需要了解得到這個工作是什麼。
謝謝!