大牛专栏 收藏本版 已有21人收藏 +发表新主题
查看: 12298|回复: 0
打印 上一主题 下一主题

Capricorn|Unity3dView嵌入安卓原生View

[复制链接]

Capricorn|Unity3dView嵌入安卓原生View

zzlple 发表于 2016-6-17 14:54:35 浏览:  12298 回复:  0 只看该作者 复制链接
今天我们来讲讲如何在unity里面嵌入安卓原生视图,首先我们先看看unity视图在android原生的实现,首先利用JD-GUI工具解开unity android原声的实现jar:classes.jar;看这段代码:

我们看到unityplayer是继承于FrameLayout的,关于FrameLayout

FrameLayout单帧布局,在单帧布局中整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。
FrameLayout的大小由其所添加的所有子控件中尺寸最大的那个子控件来控制。如果子控件的大小都一样,同一时刻只能看到最上面的子控件,其他的则被其遮挡(在进行选项卡设计时会用到帧布局)。在FrameLayout中,子控件是通过栈来绘制的,所以后添加的子控件会被绘制在上层。
FrameLayout继承ViewGroup类,除了继承父类的属性和方法外,FrameLayout类中还包含了自己特有属性和方法:
android:foreground (setForeground(Drawable))设置绘制在所有子控件之上的内容。
android:foregroundGravity(setForegroundGravity(int))设置绘制在所有子控件之上内容的gravity属性 。
FrameLayout中的Item就具有这些属性。
(1)layout_width
(2)layout_height
(3)layout_marginLeft
(4)layout_marginTop
(5)layout_marginRight
(6)layout_marginBottom
(7)layout_gravity

我们只需要unityplayer添加view就可以添加上了:

   

  // Setup activity layout    @Override    public void onCreate(Bundle savedInstanceState) {        /****UnityConfig*************************************/        requestWindowFeature(Window.FEATURE_NO_TITLE);        super.onCreate(savedInstanceState);        getWindow().setFormat(PixelFormat.RGBX_8888); // <--- This makes xperia play happy        mUnityPlayer = new UnityPlayer(this);        setContentView(mUnityPlayer);        View unityView = mUnityPlayer.getView();
        continer.addView(new TextView());        mUnityPlayer.requestFocus();        /****UnityConfig*************************************/
}
过于简单,这里就不再过多阐述,如果有疑问,可以联系。

分享至:
| 人收藏
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中级会员

Copyright © 2013-2017 ARinChina-增强现实中国技术论坛   All Rights Reserved.