国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

invalidate()

2019-11-09 17:27:11
字體:
來源:轉載
供稿:網友

android中invalidate()的自動清屏含義以及屏幕刷新

博客分類: android

invalidate()是用來刷新View的,必須是在UI線程中進行工作。比如在修改某個view的顯示時,調用invalidate()才能看到重新繪制的界面。invalidate()的調用是把之前的舊的view從主UI線程隊列中pop掉。

對于屏幕刷新有以下集中情況可以考慮:

1.不使用多線程和雙緩沖

這種情況最簡單了,一般只是希望在View發生改變時對UI進行重繪。你只需在Activity中顯式地調用View對象中的invalidate()方法即可。系統會自動調用 View的onDraw()方法。

2.使用多線程和不使用雙緩沖

這種情況需要開啟新的線程,新開的線程就不好訪問View對象了。強行訪問的話會報:android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views. 這時候你需要創建一個繼承了android.os.Handler的子類,并重寫handleMessage(Message msg)方法。android.os.Handler是能發送和處理消息的,你需要在Activity中發出更新UI的消息,然后再你的Handler(可以使用匿名內部類)中處理消息(因為匿名內部類可以訪問父類變量, 你可以直接調用View對象中的invalidate()方法 )。也就是說:在新線程創建并發送一個Message,然后再主線程中捕獲、處理該消息。

3.使用多線程和雙緩沖

Android中SurfaceView是View的子類,她同時也實現了雙緩沖。你可以定義一個她的子類并實現SurfaceHolder.Callback接口。由于實現SurfaceHolder.Callback接口,新線程就不需要android.os.Handler幫忙了。SurfaceHolder中lockCanvas()方法可以鎖定畫布,繪制玩新的圖像后調用unlockCanvasAndPost(canvas)解鎖(顯示),還是比較方便得。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇原县| 临朐县| 大埔区| 监利县| 根河市| 新龙县| 巴马| 吉水县| 嘉禾县| 包头市| 汝州市| 大英县| 石棉县| 邛崃市| 韩城市| 抚州市| 南陵县| 遂川县| 鄯善县| 英超| 平乐县| 洞头县| 仁化县| 阳朔县| 灵璧县| 攀枝花市| 南皮县| 盘山县| 建瓯市| 河池市| 晋江市| 南陵县| 正定县| 安多县| 调兵山市| 时尚| 启东市| 莱阳市| 合山市| 叙永县| 雷州市|