国产探花免费观看_亚洲丰满少妇自慰呻吟_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)解鎖(顯示),還是比較方便得。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永丰县| 金溪县| 新疆| 南昌县| 罗源县| 子长县| 大姚县| 和林格尔县| 广昌县| 沅江市| 海丰县| 北海市| 临沂市| 彭阳县| 盐边县| 抚州市| 星座| 杂多县| 上杭县| 云南省| 定边县| 保靖县| 搜索| 婺源县| 大兴区| 房山区| 饶平县| 当涂县| 湘阴县| 文水县| 隆尧县| 桂平市| 三门峡市| 宁晋县| 县级市| 淮北市| 怀宁县| 衡阳市| 湘阴县| 师宗县| 双城市|