surfaceView和View區別

surfaceView和View最本質的區別在于:?
---------------------------------------------------------------------------------------------------
surfaceView是在一個新起的單獨線程中可以重新?
繪制畫面,而View必須在UI的主線程中更新畫面。那么在UI的主線程中更新畫面可能會引發?
問題,比如你更新畫面的時間過長,那么你的主UI線程會被你正在畫的函數阻塞。 那么將無
法響應按鍵,觸屏等消息。當使用surfaceView 由于是在新的線程中更新畫面所以不會阻塞
你搜索的UI主線程。但這也帶來了另外一個問題 ,就是事件同步。比如你觸屏了一下,你需
要surfaceView中 thread處理,一般就需要有一個event queue的設計來保存touchevent,
這會稍稍復雜一點,因為涉及到線程同步。  


所以基于以上,根據游戲特點,一般分成 兩類。 
----------------------------------------------------------------------------------------------------
1 被動更新畫面的。比如棋類,這種用view就好了。因為畫面的更新是依賴于 onTouch 來更
新,可以直接使用 invalidate。 因為這種情況下,這一次Touch和下一次的Touch需要的時間
比較長些,不會產生影響。  
2 主動更新。比如一個人在一直跑動。這就需要一個單獨的thread不停的重繪人的狀態,避免
阻 塞main UI thread。所以顯然view不合適,需要surfaceView來控制。


SurfaceView簡介  
----------------------------------------------------------------------------------------------------
在一般的情況 下,應用程序的View都是在相同的GUI線程中繪制的。這個主應用程序線程同時
也用來處理所 有的用戶交互(例如,按鈕單擊或者文本輸入)。我們已經學習了如何把容易阻塞的?
處理移動到后臺線程中。遺憾的是,對于一個View的onDraw方法,不能這樣做,因為從后臺線
程 修改一個GUI元素會被顯式地禁止的。當需要快速地更新View的UI,或者當渲染代碼阻塞 GUI
線程的時間過長的時候,SurfaceView就是解決上述問題的最佳選擇。?


SurfaceView封裝了一個Surface對象,而不是Canvas。這一點很重要,因為Surface可以使用后?
臺線程繪制。對于那些資源敏感的 操作,或者那些要求快速更新或者高速幀率的地方,例如,使
用3D圖形,創建游戲,或者實時預覽攝像頭,這一點特別有用。獨立于GUI線程進行繪圖的代價
是額外的內存消耗,所以,雖然它是創建定制的View的有效方式--有時甚至是必須的,但是使用
SurfaceView的時候仍然要保持謹慎。


1. 何時應該使用SurfaceView?
SurfaceView使用的方式與任何View所派生的類都是完全相同 的。可以像其他View那樣應用動畫
,并把它們放到布局中。SurfaceView封裝的Surface支持使用所有標準Canvas方法進行繪圖,同
時也支持完全的OpenGL ES庫。使用OpenGL,你可以再Surface上繪制任何支持的2D或者3D對象
,與在2D畫布上模擬 相同的效果相比,這種方法可以依靠硬件加速(可用的時候)來極大地提高性能。
對于顯示動態的3D圖像來說,例如,那些使用Google Earth功能的應用程序,或者那些提供沉浸體
驗的交互式游戲,SurfaceView特別有用。它還是 實時顯示攝像頭預覽的最佳選擇。
2. 創建一個新的SurfaceView控件  
要創建一個新的SurfaceView,需要創建一個新的擴展了SurfaceView的類,并實現SurfaceHolder.Callback。
SurfaceHolder回調可以在底層的Surface被創建和銷毀的時候通知View,并傳遞給它對SurfaceHolder
對象的引用,其中包含了當 前有效的Surface。一個典型的SurfaceView設計模型包括一個由Thread
所派生的類,它可以接收對當前的SurfaceHolder的引用,并獨 立地更新它。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453525.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453525.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453525.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一個漂亮的輸出MySql數據庫表結構的PHP頁面

經常為了方便和直觀,我們會首先直接在數據庫中設計出表,但是接下來又要將表的結構和設計編寫在設計文檔中,以便編碼的時候可以直觀的查詢,一旦數據庫表非常多,字段非常多的時候,這無疑是件非常郁悶的工作。…

如何成就百萬點擊的名博

時近年底,去年我寫過《程序員過年——想想自己到底想干啥》,今年我想說說如何成就自己的百萬點擊技術博客。 在當下博客世界里,動輒過千萬甚至過億的博主并不少見,但談到程序員圈子里面,過百萬已算是不錯的成績。CSDN現…

mysql5.7主從復制遇到的坑

datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sockreplicate-do-dbshoppingbinlog-do-dbshopping #復制的庫server-id 3#skip-grant-tables 1symbolic-links0replicate-do-dbshop #需要復制的庫binlog-do-dbshop tmpdir /tmp #這個最好給個目錄 否則會報錯 &#xff0c…

JAVA讀取2g數據的速度_Java 讀取大容量excel

項目要求導入excel, 但是文件很大,一次性讀進去會導致內存不足而報錯,下面是我解決的方法:首先倒入需要的jarorg.apache.poipoi-ooxml3.17org.apache.poipoi-ooxml-schemas3.17org.apache.poipoi3.17com.monitorjblxlsx-streamer1…

String(byte[] bytes, int offset, int length)

public String(byte[] bytes, int offset, int length)通過使用平臺的默認字符集解碼指定的 byte 子數組,構造一個新的 String。參數: bytes:要解碼為字符的 byte offset: 要解碼的第一個 byte 的索引 length: 要解碼的…

java 屬于以下哪種語言_Java屬于以下哪種語言?( )

對于寶來(Bora2004)轎車EPS系統,屬于當轉向扭矩傳感器G269發生故障時,只需單獨更換轉向扭矩傳感器就行了。一般說來,下語可以根據下列因素判斷趨勢線的有效性 ( )。關于股價的移動規律,屬于下列論述不正確的是( )。如果希望預測未…

logback 配置

logback 的使用說明 1、maven 依賴配置 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><logback.version>1.1.7</logback.version><slf4j.version>1.7.21</slf4j.version></properties><…

android 的各種文件類

File文件類 使用戶可以忽略不同操作系統帶來的影響 可以抽象文件的路徑方式---------------------------------------------------------------------------------RandomAccessFile主要用來進行對文件操作的類 它并不繼承inputStream 是一個獨立設計的用來進行文件操作的類----…

C#設計模式(19)——狀態者模式(State Pattern)

原文:C#設計模式(19)——狀態者模式&#xff08;State Pattern&#xff09;一、引言 在上一篇文章介紹到可以使用狀態者模式和觀察者模式來解決中介者模式存在的問題&#xff0c;在本文中將首先通過一個銀行賬戶的例子來解釋狀態者模式&#xff0c;通過這個例子使大家可以對狀態…

OLTP與OLAP

當今的數據處理大致可以分成兩大類&#xff1a;聯機事務處理OLTP&#xff08;on-line transaction processing&#xff09;、聯機分析處理OLAP&#xff08;On-Line Analytical Processing&#xff09;。OLTP是傳統的關系型數據庫的主要應用&#xff0c;主要是基本的、日常的事務…

揭秘IT人才特點:中美印日四國程序員比較

揭秘IT人才特點&#xff1a;中美印日四國程序員比較 最近以裁判的身份參加了公司舉辦的編程大賽&#xff0c;發現高手云集&#xff0c;對公司內部的程序員能力也有了更深入的了解。我覺得編程能力對程序員而言&#xff0c;雖然很重要&#xff0c;但并不是全部。那么作為一個程…

BaseColumns類的作用

這個類只是提供了兩個字段&#xff0c;一個是"_id"一個是"_count"&#xff0c;便于調用數據庫時導致拼寫錯誤&#xff0c;你也可以擴展它&#xff0c;或者自定義這么個&#xff0c;然后直接調用它的常量名&#xff0c;防止寫sql語句時把列名拼錯 /** Copyr…

java如何限制輸入值_[限制input輸入類型]常用限制input方法

常用限制input的方法1.取消按鈕按下時的虛線框,在input里添加屬性值 hideFocus 或者 HideFocustrueinput type"submit" value"提交" hidefocus"true"2.只讀文本框內容,在input里添加屬性值 readonlyinput type"text" readonly3.防止退…

如何規范 CSS 的命名和書寫

我開始學前端的時候也是對于規范問題頭疼&#xff0c;后來看了網易的NEC規范&#xff0c;驚呼牛逼 NEC : 更好的CSS樣式解決方案 只遵循橫向順序即可&#xff0c;先顯示定位布局類屬性&#xff0c;后盒模型等自身屬性&#xff0c;最后是文本類及修飾類屬性。 →顯示屬性自身屬性…

app性能測試指標

性能測試在軟件的質量保證中起著重要的作用&#xff0c;它包括的測試內容豐富多樣。中國軟件評測中心將性能測試概括為三個方面&#xff1a;應用在客戶端性能的測試、應用在網絡上性能的測試和應用在服務器端性能的測試。通常情況下&#xff0c;三方面有效、合理的結合&#xf…

《學做程序經理》完整版

文/Joel Spolsky 譯/羅小平 指派一名優秀的程序經理&#xff0c;是團隊產出優秀軟件的重要前提之一。你的團隊里可能沒有這樣的人&#xff0c;其實絕大多數團隊都沒有。 Charles Simonyi&#xff0c;這位曾與MarthaStewart&#xff08;譯者注&#xff1a;美國女富豪&#…

java工程mvn引用jar_maven 項目加載本地JAR

將jar安裝到本地的maven倉庫1.首先確定本地有maven環境。2.安裝本地jar模板&#xff1a;mvn install:install-file -Dfile -DgroupId -DartifactId -Dversion -Dpackaging示例&#xff1a;mvn install:install-file -DfileF:\jave-ffmpegjave-1.0.2.jar -DgroupIdffmpegjave -D…

compress()方法

boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream) 把位圖的壓縮信息寫入到一個指定的輸出流中。如果返回true&#xff0c;可以通過傳遞一個相應的輸出流到BitmapFactory.decodeStream()來重構該位圖。注意&#xff1a;并非所有的格式都直接支…

token的三點注意項

token的安全是極度重要的 1&#xff1a;token的唯一性&#xff0c; 它代表著來自某應用系統用戶的一次成功登錄。我們可以利用java util包工具直接生成一個32位唯一字符串來實現。 String token UUID.randomUUID().toString(); 同時&#xff0c;我們定義一個javabean&#xff…

0.1 js復習

1.1 JavaScript的用途 JavaScript用來制作web頁面交互效果&#xff0c;提升用戶體驗。 能夠制作的頁面效果&#xff1a;輪播圖&#xff0c;無限瀑布流&#xff0c;tab切換&#xff0c;定位地圖&#xff0c;表單驗證等。 web前端三層來說&#xff1a; 結構層 HTML 從語義的角度&…