我有一個自定義視圖,填充我的整個屏幕。 (鋼琴鍵盤) 當用戶觸摸該按鍵時,會導致調用invalidate()
,並且整個鍵盤都會重新繪製,以便用觸摸的按鍵顯示新狀態。Android:如何讓自定義視圖部分重繪?
目前該視圖非常簡單,但我打算添加一些更漂亮的圖形。由於整個鍵盤都是動態呈現的,這會使整個鍵盤的重繪變得更加昂貴。
所以我想,讓我們看看部分重繪。現在我打電話invalidate(Rect dirty)
與正確的髒區域。如果確實需要部分重繪,我將onDraw(Canvas canvas)
方法設置爲僅在髒區域繪製關鍵點。這導致這些鍵被繪製,但鍵盤的其餘部分完全是黑色的/根本不繪製。
我錯在期待調用invalidate(Rect dirty)
會「緩存」當前canvas
,並且只允許「在髒區域中繪圖」?
有什麼辦法可以實現我想要的? (A辦法「緩存」畫布和重繪髒區「
嗯,我不喜歡這solutnio,因爲他的鍵部分繪製的原因是因爲他應該首先有hiscanvas的完整繪製無論如何。因此,問題是爲什麼他的畫布首先不能正確繪製。 – 2012-11-08 18:55:01
我需要注意的是,我現在明白,當你用一個骯髒的'rect'調用'invalidate'時,你可以使用普通的繪圖代碼,並且它應該只能實際執行髒'rect'中的繪製操作。 'Canvas'放棄了'rect'之外的操作。儘管如此,這意味着你自己的許多代碼仍然呈現,並且在我的測試中使用HW加速比完全渲染視圖要慢。 – Peterdk 2014-01-07 01:45:40
請注意,爲了將位圖繪製到畫布,繪製參數可以爲空,例如, 'canvas.drawBitmap(bitmap,0,0,null)'。 – greg7gkb 2016-03-19 06:01:25