成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Android Gallery2技術(shù)分析

yedf / 3915人閱讀

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

概述

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

UI技術(shù)分析

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


    
    
    

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


    
    

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

軟件架構(gòu)

??根據(jù)UI技術(shù)分析一節(jié)可以知道圖庫(kù)功能界面的切換本質(zhì)上時(shí)GalleryActivity中GLSurfaceView中GLView的切換?;蛘呖梢哉f(shuō)GalleryActivity有相冊(cè)縮略圖(AlbumSetPage)、相冊(cè)照片縮略圖(AlbumPage)、單張照片(PhotoPage)、幻燈片(SlideshowPage)四種不同的狀態(tài)(ActivityState)。實(shí)際上AlbumSetPage、AlbumPage、PhotoPage、SlideshowPage都繼承自ActivityState,并且它們之間的切換由StateManager來(lái)管理。每一個(gè)ActivityState都有一個(gè)GLView樹,這個(gè)樹的根節(jié)點(diǎn)是ActivityState中定義的mContentPane。
??對(duì)應(yīng)AlbumSetPage、AlbumPage、PhotoPage、SlideshowPage分別是SlotView、SlotView、PhotoView、SlideshowView。對(duì)應(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實(shí)例,GLView渲染的就是一個(gè)個(gè)的MediaObject。MediaSource由DataManager管理,AlbumSetPage等ActivityState在初始化的時(shí)候會(huì)通過(guò)DataManager獲取一個(gè)MediaObject,這個(gè)MediaObject就是ActivityState的數(shù)據(jù)的最終來(lái)源,即數(shù)據(jù)適配器的數(shù)據(jù)來(lái)源。界面(AlbumSetPage等ActivityState的子類)沒有直接和MediaSource打交道,MediaSource被封裝在了DataManager中。
??MediaSource的子類有LocalSource、PicasaSource、ComboSource(一個(gè)組合源,組合了LocalSource和PicasaSource的功能)、ClusterSource等。MediaObject有兩個(gè)子類MediaSet和MediaItem。MediaSet是一個(gè)集合類,其元素是MediaItem類型。MediaSet又有子類LocalAlbumSet、ClusterAlbumSet、ComboAlbumSet、LocalAlbum、ClusterAlbum、ComboAlbum等。MediaItem又有子類LocalMediaItem、UriImage等。數(shù)據(jù)模型用圖形表示就是:

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/68046.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<