第一章——3DUI的API使用

3D空間版UI的使用

1. 控件的使用:

1.1 VRTextView 的使用。

代碼使用如下:接口調(diào)用視需求而定,不一定全部都調(diào)用。

      VRTextView start = new VRTextView(this);
      start.setWidthAndHeight(6,6);
      start.addTranslateAnimation3D(new MathC.Vector(0,-20,-60),new MathC.Vector(0,5,-60),500);
      start.setAnimationRepeatMode(Animation.RepeatMode.NONE);
      start.setTexture(R.drawable.start);
      start.setTransparent(ANode.TRANSPARENT_STATE.SEMI_TRANSPARENT);
      start.setLookAtListener(mOnLookAtListener);
      start.setRotate(0,-30,0);
      start.onLayout(-6,0);
      start.setClipp(15,-3);
      start.registerView();
      start.playAnimation(0);
  1. 首先創(chuàng)建一個VRTextView 對象。
  2. 調(diào)用setWidthAndHeight(float width,float height)來設(shè)置該控件的寬高沟启。
    @param width and height 設(shè)置寬高
  3. 調(diào)用setTexture(int texture)來給控件設(shè)置紋理(也就是圖片)。
    @param texture 設(shè)置紋理的參數(shù)犹菇,是int類型
  4. addTranslateAnimation3D(new MathC.Vector(0,-20,-60),new MathC.Vector(0,5,-60),500)美浦、setAnimationRepeatMode(Animation.RepeatMode.NONE)以及.playAnimation(0)的配套使用。
    @param fromPoint toPoint 設(shè)置位移動畫的起始點以及終點
    @param time 設(shè)置動畫的總時長
    @param Animation.RepeatMode 設(shè)置動畫播放的類型项栏,(這個接口參數(shù)浦辨,可以直接點進去查看類型,我代碼中有注釋的)
    說明:首先添加動畫沼沈,然后設(shè)置動畫的參數(shù)流酬,然后就可以指定播放那個動畫,目前SDK中只能對位移動畫
    可以添加多個一致類型的動畫列另,其他類型的都不能添加多個動畫芽腾。這點希望一定要注意。
    比如說VRLayout也是同樣的道理页衙,希望能夠注意這一點摊滔,不要在這個地方出錯阴绢,也可以繼續(xù)優(yōu)化,
    參考我寫的位移動畫的添加多個動畫的代碼艰躺,擴展性還是挺高的呻袭。
  5. 調(diào)用setLookAtListener(mOnLookAtListener)來設(shè)置監(jiān)聽事件。
    @param ANode.OnLookAtListener 設(shè)置監(jiān)聽的類型
  6. 調(diào)用onLayout(float left,float top)來設(shè)置子控件相對與父控件的的位置腺兴,如果是單個的ui那么不要使用這個接口左电。
    @param left 子控件相對與父布局的左上角坐標(biāo)點的距離(水平距離)
    @param top 子控件相對于父布局的左上角坐標(biāo)點的距離(垂直距離)
  7. 調(diào)用setRotate(0,-30,0)接口來進行旋轉(zhuǎn)的設(shè)置。(繞y軸順時針旋轉(zhuǎn)30度)
    @param rotateX 這個是繞x旋轉(zhuǎn)的角度页响,示范旋轉(zhuǎn)案例 :setRotate(30,0,0)篓足,單純的繞x軸旋轉(zhuǎn)。
    @param rotateY 這個是繞y軸旋轉(zhuǎn)的角度 闰蚕,示范旋轉(zhuǎn)案例:setRotate(0,30,0)栈拖,單純的繞y軸旋轉(zhuǎn)
    @param rotateZ 這個是繞z周旋轉(zhuǎn)的角度,示范旋轉(zhuǎn)案例:setRotate(0,0,30)没陡,單純的繞z軸旋轉(zhuǎn)
    說明:正值是逆時針旋轉(zhuǎn)涩哟,負(fù)值是順時針旋轉(zhuǎn),可以繞多個軸同時旋轉(zhuǎn)例如:setRotate(30,30,0)
  8. 調(diào)用setClipp(float maxY,float minY)設(shè)置Y軸上的剪裁的空間诗鸭,在這個空間中顯示像素染簇,超過這個區(qū)間則舍棄會繪制参滴。
    @param maxY 在y軸上的最大的值强岸,小于這個值則顯示像素,超過這個值則不繪制像素砾赔。
    @param minY 在y軸上的最小的值蝌箍,小于這個值則舍棄像素,大于這個值則繪制像素暴心。
  9. 調(diào)用setTransparent(ANode.TRANSPARENT_STATE.SEMI_TRANSPARENT)接口來進行混合的設(shè)置妓盲,
    @param SEMI_TRANSPARENT 是半透明設(shè)置
    @param TRANSPARENT 不透明設(shè)置
    @param OPACUE 透明設(shè)置
  10. 調(diào)用registerView()這個接口,將創(chuàng)建的控件添加進渲染層专普。

1.2 VRLayout 的使用悯衬。

代碼清單(有父布局與子布局):
    VRTextView[] textViews = new VRTextView[6];
    VRLayout  listView = new VRLayout(30,40, VRUIViewGroup.ViewType.ListView,this);                                
    listView.setPosition(70,45,-60);       
    listView.setRotate(0,-30,0);      
    listView.setTexture(R.drawable.zx);      
    for(int i = 0;i<6;i++){          
          textViews[i] = new VRTextView(this);              
          textViews[i].setWidthAndHeight(25,8);     
          textViews[i].setTexture(R.drawable.bb);         
          textViews[i].onLayout(2.5f,10*(i-1)+4);           
          textViews[i].setClipp(60,32);          
          textViews[i].setLookAtListener(mOnLookAtListener);      
          listView.addView(textViews[i]);      
  }   
  listView.registerView();
  1. 創(chuàng)建VRLayout時,傳遞參數(shù)ListView檀夹,則創(chuàng)建ListView布局筋粗,并且指定寬高。

    @param  width   指定控件布局的寬炸渡。
    @param  height  指定控件布局的高娜亿。
    @param  ViewType   指定控件的布局類型
    說明:現(xiàn)在空間的布局類型都是自定義布局,也就是說通過Onlayout這個接口來指定子控件
    相對父控件的位置蚌堵。但是ListView只能在一行只能是一個子控件其他布局類型可以有多個子控件买决。
    
  2. 調(diào)用listView.addView(textViews[i])接口沛婴,將子控件添加進父布局中。
    說明:注意這個接口只能是將子布局添加進父布局的時候才能夠使用的督赤,單個布局不要使用這個接口嘁灯,沒有意義。

  3. 父布局可以隱藏也可以顯示够挂,如果想讓父布局顯示那么就調(diào)用setTransparent(ANode.TRANSPARENT)旁仿,
    接口在介紹VRTextView的時候介紹過這個接口參數(shù)中的含義,可以查看一下孽糖,這里不做介紹了枯冈。

1.3 VRUIProgressBar 的使用。

代碼清單:
  VRUIProgressBar vruiProgressBar = new VRUIProgressBar(this,R.drawable.aa);
  vruiProgressBar.setWidthAndHeight(90,6);
  vruiProgressBar.setTransparent(ANode.TRANSPARENT_STATE.TRANSPARENT);
  vruiProgressBar.setLookAtListener(mOnLookAtListener);
  vruiProgressBar.onLayout(4,6);
  vruiProgressBar.setInterX(0.0f);
  vruiProgressBar.setClipp(15,-3);
  vruiProgressBar.registerView();
  1. setInterX(0.0f)這個接口是來設(shè)置進度條的顯示的進度比例办悟,其參數(shù)值是0-1尘奏。水平的是setInterX,
    如果進度條是垂直的病蛉,那么設(shè)置的是setInterY接口(進度條類型包括兩種:水平炫加、垂直)。
    @param radio 該參數(shù)區(qū)間是0 - 1铺然,類型是float俗孝,如果視頻播放了一,那么設(shè)置為0.5魄健,初始值得0.0赋铝。
  2. 其他的接口都在上面介紹過,請查閱上面的API來進行使用沽瘦,這里不在贅述革骨。

2. UI控件的整體的接口作用的介紹。

VRUIView類中的接口介紹

  1. updataTexture(int texture) 該接口可以動態(tài)的更新每個布局控件的紋理析恋。
    @param texture 該參數(shù)提供了兩種類型良哲,一種是int類型,一種是Bitmap類型助隧,視需求而定筑凫。
  2. setPosition(float x, float y, float z) 設(shè)置控件的初始位置,注意一點并村,該接口只能在初始化的時候可以調(diào)用巍实,
    而在動畫中,調(diào)用該接口是沒有效果跟意義的橘霎。
    @param x y z 三個參數(shù)是在x軸y軸z周上的位置蔫浆,然后就可以確定三維空間上的唯一一個點。
  3. setRotate(float x, float y, float z) 設(shè)置控件的初始旋轉(zhuǎn)角度姐叁,注意一點瓦盛,該接口同樣是只能在初始化的時候
    可以調(diào)用洗显。
    @param x y z 三個參數(shù)是分別繞x軸y軸z軸旋轉(zhuǎn)的角度。
  4. setAnimationListener(IAnimationListener iAnimationListener) 該接口使用可以在編輯頁面中可以實現(xiàn)
    new IAnimationListener(){
    @Override
    public void onAnimationEnd(Animation animation) {
    }
    @Override
    public void onAnimationRepeat(Animation animation) { }
    @Override
    public void onAnimationStart(Animation animation) { }
    @Override
    public void onAnimationUpdate(Animation animation, double interpolatedTime) { }
    };
    @param 這個是動畫的監(jiān)聽實現(xiàn)的方法原环,onAnimationEnd(Animation animation)該方法是在動畫結(jié)束后回調(diào)的方法挠唆。
    @param onAnimationRepeat(Animation animation) 是動畫重復(fù)播放完一次回調(diào)的方法。
    @param onAnimationStart(Animation animation) 動畫開始播放時的回調(diào)方法嘱吗。
    @param onAnimationUpdate(Animation animation, double interpolatedTime) 在播放動畫期間一直回調(diào)的方法玄组,期間會傳遞回來時間。
  5. addRotatePointAnimation3D(MathC.Vector fromAngle, MathC.Vector toAngle, MathC.Vector rotatePoint, long time)是添加繞某點旋轉(zhuǎn)的動畫接口參數(shù)谒麦。
    @param fromAngle 起始的旋轉(zhuǎn)角度
    @param toAngle 終止的旋轉(zhuǎn)角度俄讹。
    @param rotatePoint 圍繞某點旋轉(zhuǎn)的旋轉(zhuǎn)點。
    @param time 動畫播放的總時間绕德。
    說明:這個動畫只能是單個ui的時候可以設(shè)置這種動畫患膛,但是如果是有父布局的話,
    那么這個動畫是有bug的耻蛇,在矩陣庫與四元數(shù)庫還沒有真正應(yīng)用到這個SDK庫中的時候踪蹬,
    這個只要包含旋轉(zhuǎn)功能的且是有父布局的,那么都不行使用臣咖,只能是單個ui使用才可以跃捣。
  6. addRotateSelfAnimation3D(MathC.Vector fromAngle, MathC.Vector toAngle, long time)是給單個ui添加繞自身旋轉(zhuǎn)的動畫
    @param fromAngle 起始的旋轉(zhuǎn)角度
    @param toAngle 終止的旋轉(zhuǎn)角度。
  7. addBezierAnimation3D(MathC.Vector bizerConP1, MathC.Vector bizerConP2, MathC.Vector toPoint, long time)添加貝塞爾曲線夺蛇,這個是可以個單個ui或者給有哦子視圖的Layout添加動畫的疚漆。
    @param bizerConP1 貝塞爾曲線的第一個控制點。
    @param bizerConP2 貝塞爾曲線的第二個控制點蚊惯。
    @param toPoint 貝塞爾曲線的目標(biāo)點愿卸。
    說明:貝塞爾曲線是從空間初始的默認(rèn)的位置到達(dá)規(guī)定的目標(biāo)點灵临,中間有兩個控制點截型,這樣曲線計算出來是平滑的。

VRLayout中的接口介紹

  1. updataViewGroupPosition(MathC.Vector parentPosition, MathC.Vector parentRotate)該接口接受的是父布局的位置以及旋轉(zhuǎn)的參數(shù)儒溉,然后子控件會跟隨父布局進行變換(可以實時的進行更新位置)宦焦。
    @param parentPosition 這個參數(shù)接受父布局的位置,不能接受子控件的位置顿涣,然后接受父布局的位置波闹,會更新子控件的位置的。
    @param parentRotate 這個參數(shù)接受父布局的旋轉(zhuǎn)參數(shù)涛碑,如果父布局沒有旋轉(zhuǎn)精堕,那么其中的x y z設(shè)置為0就可以。
  2. lookOff(ANode sprite) 響應(yīng)監(jiān)聽事件蒲障。lookActive(ANode sprite)同理歹篓。
    @param sprite接受矩形的類型為ANode瘫证。

說明:

——在整個ui空間中的數(shù)組中,記住最重要的一點庄撮,如果是有父子布局的背捌,那么數(shù)組中第一個是父布局的ANode對象,后面是自控件的ANode對象洞斯。一定要注意這一點毡庆,并且其中測繪計量子控件等一些算法已經(jīng)成熟,可以在其中擴展烙如。
——這里只是介紹了最常用的接口么抗,這些接口可以組裝出來最常用的一些特效,如果看不懂API那么可以直接看源代碼亚铁,這樣對于使用更有幫助乖坠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刀闷,隨后出現(xiàn)的幾起案子熊泵,更是在濱河造成了極大的恐慌,老刑警劉巖甸昏,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顽分,死亡現(xiàn)場離奇詭異,居然都是意外死亡施蜜,警方通過查閱死者的電腦和手機卒蘸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翻默,“玉大人缸沃,你說我怎么就攤上這事⌒扌担” “怎么了趾牧?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肯污。 經(jīng)常有香客問我翘单,道長,這世上最難降的妖魔是什么蹦渣? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任哄芜,我火速辦了婚禮,結(jié)果婚禮上柬唯,老公的妹妹穿的比我還像新娘认臊。我一直安慰自己,他們只是感情好锄奢,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布失晴。 她就那樣靜靜地躺著冤议,像睡著了一般。 火紅的嫁衣襯著肌膚如雪师坎。 梳的紋絲不亂的頭發(fā)上恕酸,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音胯陋,去河邊找鬼蕊温。 笑死,一個胖子當(dāng)著我的面吹牛遏乔,可吹牛的內(nèi)容都是我干的义矛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼盟萨,長吁一口氣:“原來是場噩夢啊……” “哼凉翻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捻激,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤制轰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后胞谭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垃杖,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年丈屹,在試婚紗的時候發(fā)現(xiàn)自己被綠了调俘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡旺垒,死狀恐怖彩库,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情先蒋,我是刑警寧澤骇钦,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站鞭达,受9級特大地震影響司忱,放射性物質(zhì)發(fā)生泄漏皇忿。R本人自食惡果不足惜畴蹭,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鳍烁。 院中可真熱鬧叨襟,春花似錦、人聲如沸幔荒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至右犹,卻和暖如春提澎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背念链。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工盼忌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掂墓。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓谦纱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親君编。 傳聞我的和親對象是個殘疾皇子跨嘉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容