第一章——3DUI的API使用

3D空间版UI的使用

1. 控件的使用:

1.1 VRTextView 的使用。

代码使用如下:接口调用视需求而定,不一定全部都调用。

      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. 首先创建一个VRTextView 对象。
  2. 调用setWidthAndHeight(float width,float height)来设置该控件的宽高。
    @param width and height 设置宽高
  3. 调用setTexture(int texture)来给控件设置纹理(也就是图片)。
    @param texture 设置纹理的参数,是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 设置位移动画的起始点以及终点
    @param time 设置动画的总时长
    @param Animation.RepeatMode 设置动画播放的类型,(这个接口参数,可以直接点进去查看类型,我代码中有注释的)
    说明:首先添加动画,然后设置动画的参数,然后就可以指定播放那个动画,目前SDK中只能对位移动画
    可以添加多个一致类型的动画,其他类型的都不能添加多个动画。这点希望一定要注意。
    比如说VRLayout也是同样的道理,希望能够注意这一点,不要在这个地方出错,也可以继续优化,
    参考我写的位移动画的添加多个动画的代码,扩展性还是挺高的。
  5. 调用setLookAtListener(mOnLookAtListener)来设置监听事件。
    @param ANode.OnLookAtListener 设置监听的类型
  6. 调用onLayout(float left,float top)来设置子控件相对与父控件的的位置,如果是单个的ui那么不要使用这个接口。
    @param left 子控件相对与父布局的左上角坐标点的距离(水平距离)
    @param top 子控件相对于父布局的左上角坐标点的距离(垂直距离)
  7. 调用setRotate(0,-30,0)接口来进行旋转的设置。(绕y轴顺时针旋转30度)
    @param rotateX 这个是绕x旋转的角度,示范旋转案例 :setRotate(30,0,0),单纯的绕x轴旋转。
    @param rotateY 这个是绕y轴旋转的角度 ,示范旋转案例:setRotate(0,30,0),单纯的绕y轴旋转
    @param rotateZ 这个是绕z周旋转的角度,示范旋转案例:setRotate(0,0,30),单纯的绕z轴旋转
    说明:正值是逆时针旋转,负值是顺时针旋转,可以绕多个轴同时旋转例如:setRotate(30,30,0)
  8. 调用setClipp(float maxY,float minY)设置Y轴上的剪裁的空间,在这个空间中显示像素,超过这个区间则舍弃会绘制。
    @param maxY 在y轴上的最大的值,小于这个值则显示像素,超过这个值则不绘制像素。
    @param minY 在y轴上的最小的值,小于这个值则舍弃像素,大于这个值则绘制像素。
  9. 调用setTransparent(ANode.TRANSPARENT_STATE.SEMI_TRANSPARENT)接口来进行混合的设置,
    @param SEMI_TRANSPARENT 是半透明设置
    @param TRANSPARENT 不透明设置
    @param OPACUE 透明设置
  10. 调用registerView()这个接口,将创建的控件添加进渲染层。

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. 创建VRLayout时,传递参数ListView,则创建ListView布局,并且指定宽高。

    @param  width   指定控件布局的宽。
    @param  height  指定控件布局的高。
    @param  ViewType   指定控件的布局类型
    说明:现在空间的布局类型都是自定义布局,也就是说通过Onlayout这个接口来指定子控件
    相对父控件的位置。但是ListView只能在一行只能是一个子控件其他布局类型可以有多个子控件。
    
  2. 调用listView.addView(textViews[i])接口,将子控件添加进父布局中。
    说明:注意这个接口只能是将子布局添加进父布局的时候才能够使用的,单个布局不要使用这个接口,没有意义。

  3. 父布局可以隐藏也可以显示,如果想让父布局显示那么就调用setTransparent(ANode.TRANSPARENT),
    接口在介绍VRTextView的时候介绍过这个接口参数中的含义,可以查看一下,这里不做介绍了。

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)这个接口是来设置进度条的显示的进度比例,其参数值是0-1。水平的是setInterX,
    如果进度条是垂直的,那么设置的是setInterY接口(进度条类型包括两种:水平、垂直)。
    @param radio 该参数区间是0 - 1,类型是float,如果视频播放了一,那么设置为0.5,初始值得0.0。
  2. 其他的接口都在上面介绍过,请查阅上面的API来进行使用,这里不在赘述。

2. UI控件的整体的接口作用的介绍。

VRUIView类中的接口介绍

  1. updataTexture(int texture) 该接口可以动态的更新每个布局控件的纹理。
    @param texture 该参数提供了两种类型,一种是int类型,一种是Bitmap类型,视需求而定。
  2. setPosition(float x, float y, float z) 设置控件的初始位置,注意一点,该接口只能在初始化的时候可以调用,
    而在动画中,调用该接口是没有效果跟意义的。
    @param x y z 三个参数是在x轴y轴z周上的位置,然后就可以确定三维空间上的唯一一个点。
  3. setRotate(float x, float y, float z) 设置控件的初始旋转角度,注意一点,该接口同样是只能在初始化的时候
    可以调用。
    @param x y z 三个参数是分别绕x轴y轴z轴旋转的角度。
  4. setAnimationListener(IAnimationListener iAnimationListener) 该接口使用可以在编辑页面中可以实现
    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 这个是动画的监听实现的方法,onAnimationEnd(Animation animation)该方法是在动画结束后回调的方法。
    @param onAnimationRepeat(Animation animation) 是动画重复播放完一次回调的方法。
    @param onAnimationStart(Animation animation) 动画开始播放时的回调方法。
    @param onAnimationUpdate(Animation animation, double interpolatedTime) 在播放动画期间一直回调的方法,期间会传递回来时间。
  5. addRotatePointAnimation3D(MathC.Vector fromAngle, MathC.Vector toAngle, MathC.Vector rotatePoint, long time)是添加绕某点旋转的动画接口参数。
    @param fromAngle 起始的旋转角度
    @param toAngle 终止的旋转角度。
    @param rotatePoint 围绕某点旋转的旋转点。
    @param time 动画播放的总时间。
    说明:这个动画只能是单个ui的时候可以设置这种动画,但是如果是有父布局的话,
    那么这个动画是有bug的,在矩阵库与四元数库还没有真正应用到这个SDK库中的时候,
    这个只要包含旋转功能的且是有父布局的,那么都不行使用,只能是单个ui使用才可以。
  6. addRotateSelfAnimation3D(MathC.Vector fromAngle, MathC.Vector toAngle, long time)是给单个ui添加绕自身旋转的动画
    @param fromAngle 起始的旋转角度
    @param toAngle 终止的旋转角度。
  7. addBezierAnimation3D(MathC.Vector bizerConP1, MathC.Vector bizerConP2, MathC.Vector toPoint, long time)添加贝塞尔曲线,这个是可以个单个ui或者给有哦子视图的Layout添加动画的。
    @param bizerConP1 贝塞尔曲线的第一个控制点。
    @param bizerConP2 贝塞尔曲线的第二个控制点。
    @param toPoint 贝塞尔曲线的目标点。
    说明:贝塞尔曲线是从空间初始的默认的位置到达规定的目标点,中间有两个控制点,这样曲线计算出来是平滑的。

VRLayout中的接口介绍

  1. updataViewGroupPosition(MathC.Vector parentPosition, MathC.Vector parentRotate)该接口接受的是父布局的位置以及旋转的参数,然后子控件会跟随父布局进行变换(可以实时的进行更新位置)。
    @param parentPosition 这个参数接受父布局的位置,不能接受子控件的位置,然后接受父布局的位置,会更新子控件的位置的。
    @param parentRotate 这个参数接受父布局的旋转参数,如果父布局没有旋转,那么其中的x y z设置为0就可以。
  2. lookOff(ANode sprite) 响应监听事件。lookActive(ANode sprite)同理。
    @param sprite接受矩形的类型为ANode。

说明:

——在整个ui空间中的数组中,记住最重要的一点,如果是有父子布局的,那么数组中第一个是父布局的ANode对象,后面是自控件的ANode对象。一定要注意这一点,并且其中测绘计量子控件等一些算法已经成熟,可以在其中扩展。
——这里只是介绍了最常用的接口,这些接口可以组装出来最常用的一些特效,如果看不懂API那么可以直接看源代码,这样对于使用更有帮助。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容