[問題] onDraw 速度很慢

看板AndroidDev作者 (C語言)時間12年前 (2013/03/10 11:51), 編輯推噓1(1011)
留言12則, 5人參與, 最新討論串1/1
想問一下 小弟有一個 Canvas 掛在 View 下面, 當我有觸控的 event 之後就會 invalidate 啟動 onDraw 我把所有的觸控點記起來做, 每次 invalidate 就會全部重畫 但是這樣的過程好像會很慢阿? 因為我每次都要透過 getHistorySize 取得所有的 touch 資訊 再用 loop 把資訊存在自己的結構內, 然後重劃的時候要根據 touch 的 id 來分開不同手指的線段 累積久了線段長度就會很大, 會非常的慢 不知道有沒有其他的辦法可以變快? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.229.83.131

03/10 22:28, , 1F
累積很長一定會變慢的.. DEBUG裡面就有一個選項是
03/10 22:28, 1F

03/10 22:28, , 2F
畫出手指onTouch的軌跡圖
03/10 22:28, 2F

03/10 22:28, , 3F
多畫個幾圈也是悲劇 QQ
03/10 22:28, 3F

03/11 11:35, , 4F
把之前的canvas弄成bitmap然後再畫上新的點不就好?
03/11 11:35, 4F

03/13 14:33, , 5F
invalidate()並非立即重繪, 系統會先做其他優先權更高
03/13 14:33, 5F

03/13 14:34, , 6F
的事情後在替你重繪.
03/13 14:34, 6F

03/13 14:35, , 7F
若要立即反應重繪, 你要研究 SurfaceView
03/13 14:35, 7F

03/13 20:41, , 8F
謝謝囉
03/13 20:41, 8F

03/14 11:26, , 9F
建議呼叫invalidate(Rect rect)自己去控制要更新的畫面
03/14 11:26, 9F

03/14 11:27, , 10F
假若你每次都整個畫面重畫速度會很慢,加上自定義的Rect
03/14 11:27, 10F

03/14 11:27, , 11F
會加速動畫的繪製
03/14 11:27, 11F

03/15 20:09, , 12F
謝謝
03/15 20:09, 12F
文章代碼(AID): #1HF7FKwe (AndroidDev)