2011-03-30 74 views
4

我需要一些關於我的Android手機上的簡單動畫的幫助。我是一個有動畫和圖形的新手。幫我優化此圖表動畫

我正在繪製加速度計數據作爲滑動時間序列窗口。隨着新的加速度計數據被讀取,它的數據繪製在右側,以前的數據推到左側,如下圖所示:

我的程序運行相當順利,但我想一些幫助優化動畫。這裏是我的主要關注點:

  1. 我當前實現讀取在一個線程中的所有加速度計數據,並保持在一個固定大小的FIFO隊列中的數據採集時間序列窗口的寬度。然後我使用Timer.scheduleAtFixedRate()來繪製隊列的全部內容,以便每50毫秒重新繪製整個圖形。我能改進嗎?我是否真的需要像這樣經常重新繪製圖表?在另一個我見過的類似程序中,每個像素列都被複制到左邊的一個像素,沿着圖形漣漪而下;最新的數據列被繪製在最右邊的像素列上。這是否更好?

  2. 我重繪了每50毫秒運行繪圖函數的繪圖線程中的圖例(在左上角)。有什麼方法可以「保留」這個傳說,而不必不斷地重新繪製它?

任何其他幫助將不勝感激。我聽說過像雙緩衝這樣的優化,但是如果這對我有幫助,那麼我是無能爲力的。

+0

您應該考慮使用40ms。 50ms給你20fps,這比眼睛會記錄的要少。因此用戶可能會遇到延遲或別名。提供您的應用程序管理25fps,這應該是一個經驗法則選擇的幀率。 – Pedery 2011-04-01 18:22:39

回答

1

如果圖例和十字線只需要繪製一次,那麼您應該將其放入一個緩衝位圖。對於你的圖線,可以嘗試使用Path對象來繪製線條。如果有時間繪製線,只需將drawLine繪製到適當的點,然後再適當地將畫布左移。如果

+0

您能否詳細介紹一下使用'緩衝位圖'來存儲像傳奇和十字線這樣的靜態內容?我對這種技術並不熟悉。另外,關於翻譯畫布,這會比重新繪製圖表更快嗎? – stackoverflowuser2010 2011-04-04 22:38:57

+0

我知道這似乎不是這樣,我也很震驚。但由於某種原因,當我爲繪畫完成所有數學工作時,所花費的時間不僅僅是翻譯畫布。至於緩衝區,創建一個位圖畫布對,並繪製圖例和十字線到那。然後,當你得到你的API畫布時,只需在該畫布上繪製bitamp緩衝區。 – AedonEtLIRA 2011-04-05 20:33:15

+0

我會嘗試翻譯方法,謝謝。現在,對於'緩衝區位圖',你是否說我應該將圖例和十字線保存到預先繪製的位圖中並將其繪製?如果是這樣,那麼繪畫仍然需要在不斷調用來執行動畫的View.onDraw()方法中完成,對吧?我希望能夠以某種方式「修復」傳說和十字線,而不必一直重繪它們。這是不可能的嗎? – stackoverflowuser2010 2011-04-05 20:54:35