android - 如何在android布局中添加unityplayer作为 subview ?

标签 android

我正在尝试将 unityview 添加为 android 布局中的 subview 。 我在 android xml 文件中创建相对布局,并将 unityview 添加到 relativelayout。 但是 unityview 在相对布局的左下角显示为小图像。

黑色部分是我的relativelayout但是unity view没有占用进入relative layout。

代码如下:

  public class MainActivity extends UnityPlayerActivity {

            public static Context mContext;
            private Handler handler=new Handler();
            private UnityPlayer m_UnityPlayer;

            @Override
                protected void onCreate(Bundle bundle) {
                    super.onCreate(bundle);


                            mContext = this;
                            m_UnityPlayer = new UnityPlayer(this);

                            int glesMode = m_UnityPlayer.getSettings().getInt("gles_mode", 1);

                            boolean trueColor8888 = false;

                            m_UnityPlayer.init(glesMode, trueColor8888);

                            setContentView(R.layout.activity_main);

                            //This is my relative layout
                            RelativeLayout layout = (RelativeLayout) findViewById(R.id.relativelayout2);    
//Relativelayout width is 750dp and height is 640dp.

                            LayoutParams lp = new LayoutParams (750, 640);

//Iam adding unityview to layout here

                            layout.addView(m_UnityPlayer.getView(), 0, lp);


            }
            }

Unitysubview

最佳答案

终于找到了解决方案。

  • MainActivity 应该扩展为 Activity,而不是 UnityPlayerActivity
  • 将这两行添加到 android list 中的 Activity
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />

工作代码是:

    public class MainActivity extends Activity implements OnTouchListener {
        public static Context mContext;
        private Handler handler=new Handler();
        protected UnityPlayer mUnityPlayer; 



        protected void onCreate(Bundle savedInstanceState) {


        requestWindowFeature(Window.FEATURE_NO_TITLE);
                super.onCreate(savedInstanceState);
                mContext = this;
                    getWindow().takeSurface(null);
                setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
                getWindow().setFormat(PixelFormat.RGB_565);

                mUnityPlayer = new UnityPlayer(this);
                if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true))
                    getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                           WindowManager.LayoutParams.FLAG_FULLSCREEN);

                int glesMode = mUnityPlayer.getSettings().getInt("gles_mode", 1);
                boolean trueColor8888 = false;
                mUnityPlayer.init(glesMode, trueColor8888);

                View playerView = mUnityPlayer.getView();


                setContentView(R.layout.activity_main);

                FrameLayout layout = (FrameLayout) findViewById(R.id.frameLayout2);     

                LayoutParams lp = new LayoutParams (750, 630);

                layout.addView(playerView, 0, lp);

    }

    protected void onDestroy ()
    {
        mUnityPlayer.quit();
        super.onDestroy();
    }

    // onPause()/onResume() must be sent to UnityPlayer to enable pause and resource recreation on resume.
    protected void onPause()
    {
        super.onPause();
        mUnityPlayer.pause();
    }
    protected void onResume()
    {
        super.onResume();
        mUnityPlayer.resume();
    }
    public void onConfigurationChanged(Configuration newConfig)
    {
        super.onConfigurationChanged(newConfig);
        mUnityPlayer.configurationChanged(newConfig);
    }
    public void onWindowFocusChanged(boolean hasFocus)
    {
        super.onWindowFocusChanged(hasFocus);
        mUnityPlayer.windowFocusChanged(hasFocus);
    }
    public boolean dispatchKeyEvent(KeyEvent event)
    {
        if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
            return mUnityPlayer.onKeyMultiple(event.getKeyCode(), event.getRepeatCount(), event);
        return super.dispatchKeyEvent(event);
    }

}

结果:

UnityCorrectedSubview

关于android - 如何在android布局中添加unityplayer作为 subview ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21851341/

相关文章:

android - 使 onSensorChanged 不会减慢 UI

android - 使用 Android SDK (OpenSL) 解码 ogg 和其他压缩音频文件格式

java - Android 中的 Diffie Hellman key 交换

android - 类似 FM radio 的模拟控制

android - 在 Codename One 应用程序中显示 Android LinearLayout

java - 硬件加速的 webview 滑入式动画在 ICS 上闪烁

android - 如何在带有 Android 5.0 Lollipop 的代码(不是 xml)中以编程方式使用 RippleDrawable?

android - 如何在安卓设备上找到默认浏览器设置

javascript - 未定义不是 this.state 中的对象 - React Native

android - 内容解析器返回错误的大小