我希望在視圖完成重新繪製後通知我,讓它失效。如this answer所述,invalidate()
方法不立即調用UI的視圖的onDraw()
,而是在主線程空閒後執行的消息隊列中調度重繪。Android - 重新繪製失效後的監聽器()
我想展示一個進度對話框,做一些UI修改,然後在正確繪製視圖時關閉對話框。是否有一些技巧可以讓我知道視圖何時被繪製?也許通過繼承視圖,覆蓋onDraw()
方法?
我希望在視圖完成重新繪製後通知我,讓它失效。如this answer所述,invalidate()
方法不立即調用UI的視圖的onDraw()
,而是在主線程空閒後執行的消息隊列中調度重繪。Android - 重新繪製失效後的監聽器()
我想展示一個進度對話框,做一些UI修改,然後在正確繪製視圖時關閉對話框。是否有一些技巧可以讓我知道視圖何時被繪製?也許通過繼承視圖,覆蓋onDraw()
方法?
我想你自己回答了你的問題。爲什麼不:
public class DrawListenerView extends View{
private Callback callback;
public DrawListenerView(Callback callback){
this.callback = callback;
}
@Override
protected void onDraw (Canvas canvas){
super.onDraw(canvas);
//add your method here you want to call
//Or use a Callback-pattern
callback.finish();
}
}
public interface Callback(){
public void finish();
}
如果你看看來源:
註釋上面說
無效整個視圖。如果視圖可見,onDraw(android.graphics.Canvas)將在未來的某個時刻被調用。這必須從UI線程調用。要從非UI線程調用,請調用postInvalidate()。
試試吧:)
編輯:也許你想使用一個回調來處理這個問題。
你發現嘗試這樣做很奇怪,因爲你正在做的全部錯誤。 ;)
你正在談論的是想等到關閉一個對話框,直到完成繪製。這意味着您有一個足夠長的繪圖操作,您可以等待它。
在onDraw中繪製一幀應該是快。如果您想要達到60fps並且擁有流暢的用戶界面,那麼每幀有16毫秒的時間來完成任何輸入處理和繪圖。繪圖應該永遠不會花費足夠長的時間,以至於在完成時您想要顯示進度對話框。 (除此之外,通過使UI部分失效阻止您的UI線程進行繪製,並且您的進度對話框無法說明任何進度,直到完成任何操作爲止。)
如果您需要執行一些複雜的屏幕外渲染以後再顯示,您應該在AsyncTask或類似的UI線程中執行此操作,而不是在視圖的實際onDraw方法中執行。一旦您完成回調,您可以快速繪製剛創建的預渲染圖像並關閉進度對話框。
問題是,我沒有做圖紙,系統是。我所做的只是要求一些TextViews更改文本大小,這會導致多次失效,然後在父視圖結束後,我想開始遊戲倒計時。我的主要問題是Android爲我的setTextSize做了很多無效的調用,但我在另一個問題上詢問了這個問題。 – Axarydax
你能解釋更多嗎?我遇到了類似問題的問題。你能看看我的問題嗎? http://stackoverflow.com/questions/21071689/android-listener-when-the-view-redrawn-finished – lolyoshi