亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Android Gallery2技術(shù)分析

yedf / 3874人閱讀

摘要:渲染和事件處理通過這個數(shù)結(jié)構(gòu)傳遞。對應(yīng)的數(shù)據(jù)適配器分別是。用圖形表示如下數(shù)據(jù)模型和數(shù)據(jù)流分析數(shù)據(jù)適配器是數(shù)據(jù)到的橋梁,連接數(shù)據(jù)源和。由管理,等在初始化的時候會通過獲取一個,這個就是的數(shù)據(jù)的最終來源,即數(shù)據(jù)適配器的數(shù)據(jù)來源。

概述

??圖庫和相機在內(nèi)部實現(xiàn)上其實是共用的一個app,即Gallery2。它們是Gallery2的兩個不同的入口。圖庫的主要功能是展示和管理設(shè)備中的或者網(wǎng)絡(luò)上的媒體內(nèi)容(照片、視頻),雖然名字是圖庫,但是其功能不僅僅限于圖片。其代碼位于packages/apps/Gallery2。

UI技術(shù)分析

??打開圖庫應(yīng)用首先看到的是相冊縮略圖,點擊一個相冊后進入這個相冊中的照片的縮略圖,點擊一個照片的縮略圖后進入單張照片模式。這些不同的UI之間的切換并沒有使用不同的Activity,而是在同一個Actvity中進行的。這個Activity是GalleryActivity(有兩個GalleryActivity,這兒指的是com.android.gallery3d.app包中的)。布局文件是main.xml,其主要內(nèi)容如下:


    
    
    

接著看gl_root_group.xml,其內(nèi)容如下:


    
    

??這就是圖庫UI實現(xiàn)的特殊之處。GLRootView繼承自GLSurfaceView。實際上Gallery2基于GLSurfaceView實現(xiàn)了一套UI控件,這套UI組件畫在這個GLSurfaceView上。Gallery2的圖庫功能的UI實現(xiàn)沒有采用Android通常的View控件系統(tǒng)。Gallery2實現(xiàn)了GLView、GLRootView、GLCanvas等。GLView就相當(dāng)于通常Android控件體系中的View,它是所有控件的父類。GLView可以接收觸摸事件,并把自己畫到GLCanvas上,GLCanvas是一個接口其實現(xiàn)有GLES11Canvas、GLES20Canvas。GLCanvas把自己繪制到GLSurfaceView中。接著說GLView,一個GLView可以有零個或多個子GLView,它們形成一個樹結(jié)構(gòu)。渲染和事件處理通過這個數(shù)結(jié)構(gòu)傳遞。GLView必需加入到(Attach)GLRoot中才能完成渲染和接收事件。GLView可以通過調(diào)用GLRoot的requestRender()和requestLayoutContentPane()方法實現(xiàn)GLView樹的渲染和布局。
??GLRootView除了繼承自GLSurfaceView之外還實現(xiàn)了GLRoot接口。是所有GLView的根控件。即整個GLView樹是添加在它上面的,這通過GLRootView的setContentPane方法實現(xiàn),有些類似于Activity的setContentView。GLView的渲染在GL線程中進行,事件處理在主線程中進行。這兩個線程需要同步。在事件處理和布局的時候GLRootView會獲取一個鎖,從而避免渲染線程在這個時候執(zhí)行。這個鎖就是GLRootView中的mRenderLock。
??總結(jié)一下就是Gallery2不同于一般app之處是它的控件從GLView繼承而不是View,GLView渲染在GLSurfaceView中。Gallery2實現(xiàn)了自己的一套UI控件系統(tǒng)。

軟件架構(gòu)

??根據(jù)UI技術(shù)分析一節(jié)可以知道圖庫功能界面的切換本質(zhì)上時GalleryActivity中GLSurfaceView中GLView的切換。或者可以說GalleryActivity有相冊縮略圖(AlbumSetPage)、相冊照片縮略圖(AlbumPage)、單張照片(PhotoPage)、幻燈片(SlideshowPage)四種不同的狀態(tài)(ActivityState)。實際上AlbumSetPage、AlbumPage、PhotoPage、SlideshowPage都繼承自ActivityState,并且它們之間的切換由StateManager來管理。每一個ActivityState都有一個GLView樹,這個樹的根節(jié)點是ActivityState中定義的mContentPane。
??對應(yīng)AlbumSetPage、AlbumPage、PhotoPage、SlideshowPage分別是SlotView、SlotView、PhotoView、SlideshowView。對應(yīng)的數(shù)據(jù)適配器分別是AlbumSetDataLoader、AlbumDataLoader、PhotoDataAdapter、SlideshowDataAdapter。用圖形表示如下:

數(shù)據(jù)模型和數(shù)據(jù)流分析

??數(shù)據(jù)適配器(Adapter)是數(shù)據(jù)到UI的橋梁,連接數(shù)據(jù)源和UI。Gallery2中數(shù)據(jù)源是MediaSource,MediaSource創(chuàng)建MediaObject實例,GLView渲染的就是一個個的MediaObject。MediaSource由DataManager管理,AlbumSetPage等ActivityState在初始化的時候會通過DataManager獲取一個MediaObject,這個MediaObject就是ActivityState的數(shù)據(jù)的最終來源,即數(shù)據(jù)適配器的數(shù)據(jù)來源。界面(AlbumSetPage等ActivityState的子類)沒有直接和MediaSource打交道,MediaSource被封裝在了DataManager中。
??MediaSource的子類有LocalSource、PicasaSource、ComboSource(一個組合源,組合了LocalSource和PicasaSource的功能)、ClusterSource等。MediaObject有兩個子類MediaSet和MediaItem。MediaSet是一個集合類,其元素是MediaItem類型。MediaSet又有子類LocalAlbumSet、ClusterAlbumSet、ComboAlbumSet、LocalAlbum、ClusterAlbum、ComboAlbum等。MediaItem又有子類LocalMediaItem、UriImage等。數(shù)據(jù)模型用圖形表示就是:

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/68046.html

相關(guān)文章

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<