<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 189,comments - 115,trackbacks - 0

     Gallery3D筆記

    http://www.eoeandroid.com/viewthread.php?tid=23080&extra=page%3D1%26amp;filter%3Dtype%26amp;typeid%3D32
    布局及特效  gallery3d 的精華
    一、布局
    gallery3d的界面生成和普通的應(yīng)用程序不一樣。普通程序一般一個(gè)界面就是一個(gè)activity,布局用xml或代碼都可以實(shí)現(xiàn),界面切換是activity的切換方式;而gallery3d沒有用android的UI系統(tǒng),而是用opengl畫出來的,即界面是在同一個(gè)activity的,如主界面,縮略圖界面,單張圖片查看界面,標(biāo)記界面等都屬于同一個(gè)activity。那么這界面布局不同的界面是如何組合到一起的呢?分析代碼,可以把它看成一個(gè)狀態(tài)機(jī)
    :   
    1、標(biāo)記模式   public static final int MODE_SELECT = 1;(HudLayer)
    包含了主界面標(biāo)記模式,縮略界面矩陣游覽時(shí)標(biāo)記模式、縮略圖界面分類游覽時(shí)標(biāo)記模式3個(gè)界面
    2、普通模式  public static final int MODE_NORMAL = 0;(HudLayer)
    包含了    
        public static final int STATE_MEDIA_SETS = 0;主界面
        public static final int STATE_GRID_VIEW = 1;縮略圖矩陣瀏覽
        public static final int STATE_FULL_SCREEN = 2;查看界面
        public static final int STATE_TIMELINE = 3;縮略圖界面分類瀏覽
    有了以上狀態(tài)分類后,在渲染的時(shí)候就能根據(jù)些界面的組成來定哪些控件譔隱藏,哪些要顯示了。
    下面是基本控件:
    com.cooliris.media.GridLayer
    com.cooliris.media.BackgroundLayer
    com.cooliris.media.HudLayer
    com.cooliris.media.ImageButton
    com.cooliris.media.TimeBar
    com.cooliris.media.MenuBar
    com.cooliris.media.PopupMenu
    com.cooliris.media.PathBarLayer
    在渲染時(shí),每一幀所有界面上的元素都畫了,由于根據(jù)上面的狀態(tài)只把特定窗口的特定元素顯示出來,其它窗口中的隱藏,所以不會亂。
    Layer是上面控件的基類,上面控件的類也就有了下面兩個(gè)方法來隱藏不譔顯示的界面元素。
      public boolean isHidden() {
            return mHidden;
        }

        public void setHidden(boolean hidden) {
            if (mHidden != hidden) {
                mHidden = hidden;
                onHiddenChanged();
            }
        }
    下面是根據(jù)上面分類來畫不同元素所用的標(biāo)識:
        public static final int PASS_THUMBNAIL_CONTENT = 0;
        public static final int PASS_FOCUS_CONTENT = 1;
        public static final int PASS_FRAME = 2;
        public static final int PASS_PLACEHOLDER = 3;
        public static final int PASS_FRAME_PLACEHOLDER = 4;
        public static final int PASS_TEXT_LABEL = 5;
        public static final int PASS_SELECTION_LABEL = 6;
        public static final int PASS_VIDEO_LABEL = 7;
        public static final int PASS_LOCATION_LABEL = 8;
        public static final int PASS_MEDIASET_SOURCE_LABEL = 9;

    drawDisplayItem(view, gl, displayItem, texture, PASS_THUMBNAIL_CONTENT, placeholder,
                                    displayItem.mAnimatedPlaceholderFade); 畫縮略圖的,注掉此句,前兩屏只顯示框,第三屏OK
    drawDisplayItem(view, gl, displayItem, texture, PASS_FOCUS_CONTENT, null, 0.0f);畫單張圖片的,注掉,第三屏黑屏
    drawDisplayItem(view, gl, itemDrawn, textureToUse, PASS_FRAME, previousTexture, ratio);畫邊框的,注掉,前兩屏明顯沒有邊框,巨齒明顯
    drawDisplayItem(view, gl, displayItem, textureString, PASS_TEXT_LABEL, null, 0);畫文本標(biāo)簽的
    drawDisplayItem(view, gl, displayItem, textureToUse, PASS_SELECTION_LABEL, null, 0);畫選中標(biāo)記的
    drawDisplayItem(view, gl, displayItem, videoTexture, PASS_VIDEO_LABEL, null, 0);畫視頻標(biāo)記的

    drawDisplayItem(view, gl, displayItem, locationTexture, PASS_LOCATION_LABEL, null, 0);畫位置標(biāo)記的
    drawDisplayItem(view, gl, displayItem, locationTexture, PASS_MEDIASET_SOURCE_LABEL,
                                            transparentTexture, 0.85f);畫源來源圖標(biāo)的(相機(jī)或一般文件夾)

    二、特效
    舉如何顯示一張圖片為例,在圖片完全顯示出來經(jīng)過這樣一個(gè)過程,附近的圖片漸小漸出,當(dāng)前圖片漸大漸入,當(dāng)前圖片逐漸變大直到全屏。實(shí)現(xiàn)這個(gè)特效,要進(jìn)行很多幀的渲染。就是說并不是只調(diào)一次onDrawFrame函數(shù)就可以了,要調(diào)用多次。可以把這個(gè)特效的實(shí)現(xiàn)想成一個(gè)狀態(tài)變化的過程,在每一個(gè)狀態(tài),紋理的顯示大小和位置都不同,這也符合動畫的基本原理。放大、縮小我們只要改變頂點(diǎn)數(shù)據(jù)就可以做到,gallery3d也是這樣做的,下面是主要代碼:
    我們知道調(diào)用onDrawFrame來渲染,最后調(diào)到下面的drawFocusItems函數(shù),
    GridQuad quad = GridDrawables.sFullscreenGrid[vboIndex];
    float u = texture.getNormalizedWidth();
    float v = texture.getNormalizedHeight();
    float imageWidth = texture.getWidth();
    float imageHeight = texture.getHeight();
    boolean portrait = ((theta / 90) % 2 == 1);
    if (portrait) {
            viewAspect = 1.0f / viewAspect;
    }
    quad.resizeQuad(viewAspect, u, v, imageWidth, imageHeight);//改變用來貼圖片的長方形的大小
    quad.bindArrays(gl);//綁定新數(shù)據(jù),為渲染做準(zhǔn)備。
    而位置的改變有兩種方式,一種是直接以頂點(diǎn)數(shù)據(jù)中改變,另一種是計(jì)算出在3維3個(gè)方向的偏移量,再調(diào)用gltranslate來做,從代碼可以看出采用的是第二種方式來做的,比第一種方式更方便一些。代碼:
    gl.glTranslatef(-translateXf, -translateYf, -translateZf);
    而這里的3個(gè)偏移量的計(jì)算是和camera相關(guān)的,相關(guān)文件為GridCamera.java,GridCameraManager.java,過程很復(fù)雜,理清楚后再細(xì)化吧。

    cache管理
    下面是cache文件
    /sdcard/Android/data/com.cooliris.media/cache/local-album-cache
    d---rwxr-x system   sdcard_rw          2010-05-21 09:56 local-album-cache
    d---rwxr-x system   sdcard_rw          2010-05-21 09:56 local-meta-cache
    ----rwxr-x system   sdcard_rw   299877 2010-05-28 07:36 local-album-cachechunk_0
    d---rwxr-x system   sdcard_rw          2010-05-21 09:56 geocoder-cache
    ----rwxr-x system   sdcard_rw      284 2010-05-28 07:36 local-album-cacheindex
    d---rwxr-x system   sdcard_rw          2010-05-21 09:56 local-image-thumbs
    d---rwxr-x system   sdcard_rw          2010-05-21 09:56 local-video-thumbs
    d---rwxr-x system   sdcard_rw          2010-05-21 09:56 picasa-thumbs
    ----rwxr-x system   sdcard_rw       80 2010-05-28 07:36 local-meta-cachechunk_0
    ----rwxr-x system   sdcard_rw      164 2010-05-28 07:36 local-meta-cacheindex
    d---rwxr-x system   sdcard_rw          2010-05-21 09:56 hires-image-cache
    ----rwxr-x system   sdcard_rw   627629 2010-05-28 07:37 local-image-thumbschunk_0
    ----rwxr-x system   sdcard_rw     3914 2010-05-21 09:56 local-image-thumbsindex
    ----rwxr-x system   sdcard_rw    53343 2010-05-28 07:34 hires-image-cache-4982941342287215583_1024.cache
    ----rwxr-x system   sdcard_rw   237692 2010-05-28 07:33 hires-image-cache3684568484369117627_1024.cache
    ----rwxr-x system   sdcard_rw   133182 2010-05-28 07:34 hires-image-cache607542544081226432_1024.cache
    ----rwxr-x system   sdcard_rw    83223 2010-05-28 07:34 hires-image-cache4275479623210216146_1024.cache
    ----rwxr-x system   sdcard_rw   292837 2010-05-28 07:34 hires-image-cache-646316556936433937_1024.cache
    ----rwxr-x system   sdcard_rw   191377 2010-05-28 07:35 hires-image-cache2631364604509958174_1024.cache
    ----rwxr-x system   sdcard_rw   366905 2010-05-28 07:35 hires-image-cache-3280562009766080884_1024.cache
    ----rwxr-x system   sdcard_rw   323671 2010-05-28 07:35 hires-image-cache5752471827533329222_1024.cache
    創(chuàng)建cache的關(guān)鍵代碼
    LocalDataSource
    public static final DiskCache sThumbnailCache = new DiskCache("local-image-thumbs");----------------------local-image-thumbs local-image-thumbschunk_0  local-image-thumbsindex
    public static final DiskCache sThumbnailCacheVideo = new DiskCache("local-video-thumbs");--------------------local-video-thumbs
    public static final DiskCache sAlbumCache = new DiskCache("local-album-cache");----------------------local-album-cache  local-album-cacheindex
    public static final DiskCache sMetaAlbumCache = new DiskCache("local-meta-cache");------------------local-meta-cache  local-meta-cacheindex
    getChunkFile --------------local-meta-cachechunk_0  local-album-cachechunk_0

    ReverseGeocoder::  private static final DiskCache sGeoCache = new DiskCache("geocoder-cache"); -------------------------geocoder-cache
    PicasaDataSource:: public static final DiskCache sThumbnailCache = new DiskCache("picasa-thumbs");-----------------------------picasa-thumbs
    UriTexture::writeToCache  --------------------------hires-image-cache-xxx_1024.cache

    歡迎大家多交流,不對之處請大家指正。

    OpenGL Programming Guide   http://www.glprogramming.com/red/
    posted on 2010-09-02 19:59 MEYE 閱讀(804) 評論(0)  編輯  收藏 所屬分類: Android3D
    主站蜘蛛池模板: 国产成人亚洲精品电影| 亚洲国产视频久久| 亚洲天天做日日做天天欢毛片| 亚洲一区二区三区日本久久九| 亚洲一级大黄大色毛片| jizzjizz亚洲日本少妇| 久青草视频在线观看免费 | 国产亚洲精品成人AA片| 色妞www精品视频免费看| 最近更新免费中文字幕大全| 57pao国产成视频免费播放| 四虎成人免费影院网址| 国产亚洲精品不卡在线| 亚洲第一区视频在线观看| 日本亚洲中午字幕乱码 | 大地资源网高清在线观看免费| 18勿入网站免费永久| 免费一级肉体全黄毛片| 亚洲伊人久久大香线蕉苏妲己| 亚洲AV噜噜一区二区三区| 日韩视频在线观看免费| 国产在线19禁免费观看| 亚洲av一综合av一区| jzzijzzij在线观看亚洲熟妇| 无码中文字幕av免费放dvd| 永久免费看bbb| 亚洲色图国产精品| 美女被免费网站在线视频免费 | 亚洲&#228;v永久无码精品天堂久久 | 亚洲女初尝黑人巨高清| 亚洲va在线va天堂成人| 精品国产福利尤物免费| 啦啦啦www免费视频| 亚洲AV永久精品爱情岛论坛| 婷婷亚洲综合一区二区| 99热在线精品免费播放6| 亚洲成a人片在线播放| 亚洲av乱码一区二区三区| 中文字字幕在线高清免费电影| 亚洲精品视频免费看| 国产亚洲精品第一综合|