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

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

invalidate()

2019-11-09 18:34:19
字體:
來源:轉載
供稿:網友

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)解鎖(顯示),還是比較方便得。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博爱县| 黄石市| 厦门市| 平陆县| 临猗县| 玛纳斯县| 扬中市| 唐海县| 余庆县| 金华市| 仁布县| 白山市| 衡水市| 台安县| 获嘉县| 灯塔市| 兴国县| 佛冈县| 卓尼县| 本溪| 苍山县| 高安市| 德化县| 舟山市| 西峡县| 泰来县| 牙克石市| 苏尼特左旗| 承德县| 山丹县| 巴东县| 襄城县| 宁乡县| 郁南县| 广南县| 商城县| 德清县| 繁昌县| 奎屯市| 武胜县| 沧州市|