我所理解的Android和iOS上的View

來源:互聯網
上載者:User

標籤:idt   做了   引入   name   定義   通過   graphic   詳細   object   

View,幾乎是所有介面系統中的基類,在iOS裡面是UIView,在Android裡是View。 那麼,到底View是什麼東西,他做了些什麼,他是怎麼做到的,在這篇文章中,希望能帶給大家一些啟發。

抽象

View實際上是一個抽象類別,他負責對渲染、布局以及觸摸事件進行抽象。

渲染抽象

我們知道,不管是 iOS 還是 Android,他們的渲染引擎都是 OpenGL,OpenGL是面向C語言的(當然,在Objective-C和Java中都有封裝)。而作為前端開發人員,要直接使用OpenGL編寫介面,真是不(Tai)現(Nan)實(Le)。於是,我們有了介面庫,這種介面庫,在iOS上,我們稱之為UIKit,在Android上,我們使用android.view.*包。不管是iOS還是Android,介面庫要做的事情,目標都是一致的,那就是將介面渲染從具體變成抽象。

布局抽象

布局,是View最重要的特性,諸如層級控制、矩形大小、Matrix變換都屬於布局抽象的範疇,布局是渲染、觸摸兩者的基礎,缺少布局,渲染和觸摸便無法繼續。

觸摸事件抽象

除了渲染、布局以外,View還需要承擔另外一個職責————觸控。所謂觸控,有觸才有控,一方面View要負責接收觸摸事件,另一方面View要負責反饋接收到的觸摸事件,至於具體的觸控實現,下文會詳細描述。

渲染

一般來說View不會直接面向OpenGL進行封裝,而是通過中介層,在iOS上,使用的是CALayer(CoreGraphics),而在Android上,使用的是 Canvas(Skia)。

iOS

在iOS上,每個UIView都會有一個相對應的CALayer,我們稱之為Layer-Back,也就是說,所有的UIView屬性,最終,都會設定到CALayer身上。

為什麼要使用CALayer這個中介層呢?很重要的一點是,CoreGraphcis架構,這個架構,在NEXT系統建立之初就存在了,並且是整個macOS系統的核心架構。這麼6的架構,為毛不讓他移植到iOS上呢?於是,CALayer就順理成章地成為了UIView背後的賢內助。UIView會將以下屬性proxy到CALayer上

  • alpha

  • frame

  • backgroundColor

  • clipsToBounds

  • hidden

為毛這麼少屬性?嗯,因為其它屬性需要你自己去設定到CALayer上。什嗎?你要問CALayer是怎麼渲染到螢幕上的?你自己查吧,據說,專門有一本書是寫這個的。總的來說,UIView在渲染上,並沒有做什麼神奇的事情,CALayer才是一直默默耕耘的那個。

Android

Android實際上是個草根系統,出生的時候,並沒有一個有錢的爸爸…所以呢? Android View的渲染層,其實是照抄H5中的Canvas。

比如,我要在 View 上畫一個黑色的 backgroundColor,實際上會在 void onDraw(Canvas canvas)方法中執行以下代碼。

又例如,我想要讓View有圓角裁剪的效果,怎麼辦呢?實際上,會這麼做。

醬紫,在這個View中所繪製的所有圖案(包括子View)都會被某個路徑裁剪掉。

那麼,View幹了啥? View實際上會定義好x, y, width, height只有知道這些參數,你才能畫出一個背景色,不然……你畫個卵?View還管理著 alpha/backgroundColor等屬性,這些屬性,你都能在Canvas、Paint類中找到相關的參數。

iOS VS Android

這個,沒什麼好對比的,無非就是渲染層的抽象不一樣而已。就渲染效能而言,iOS是更勝一籌的,自Android 4.x引入Skia以後,特別是Skia在 Google黃油計劃以後,Android的渲染效能也差不了去哪裡了。如果,你要死摳對比的話,我只能說一個是CALayer,一個是Canvas,CALayer更抽象而已了。

 

78486699

我所理解的Android和iOS上的View

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.