如何在android布局中添加unityplayer作为子视图?

前端之家收集整理的这篇文章主要介绍了如何在android布局中添加unityplayer作为子视图?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在 android布局中添加unityview作为子视图.
我在android xml文件中创建相对布局,并将unityview添加到relativelayout.
但是统一视图在相对布局的左下方显示为小图像.

黑色部分是我的相对布局,但是不占据的统一视图进入相对布局.

代码如下:

  1. public class MainActivity extends UnityPlayerActivity {
  2.  
  3. public static Context mContext;
  4. private Handler handler=new Handler();
  5. private UnityPlayer m_UnityPlayer;
  6.  
  7. @Override
  8. protected void onCreate(Bundle bundle) {
  9. super.onCreate(bundle);
  10.  
  11.  
  12. mContext = this;
  13. m_UnityPlayer = new UnityPlayer(this);
  14.  
  15. int glesMode = m_UnityPlayer.getSettings().getInt("gles_mode",1);
  16.  
  17. boolean trueColor8888 = false;
  18.  
  19. m_UnityPlayer.init(glesMode,trueColor8888);
  20.  
  21. setContentView(R.layout.activity_main);
  22.  
  23. //This is my relative layout
  24. RelativeLayout layout = (RelativeLayout) findViewById(R.id.relativelayout2);
  25. //Relativelayout width is 750dp and height is 640dp.
  26.  
  27. LayoutParams lp = new LayoutParams (750,640);
  28.  
  29. //Iam adding unityview to layout here
  30.  
  31. layout.addView(m_UnityPlayer.getView(),lp);
  32.  
  33.  
  34. }
  35. }

解决方法

最后我得到了解决方案.

> MainActivity应该作为Activity扩展,而不是UnityPlayerActivity.
>将这两行添加到android清单中的活动

  1. <Meta-data android:name="unityplayer.UnityActivity" android:value="true" />
  2. <Meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />

工作代码是:

  1. public class MainActivity extends Activity implements OnTouchListener {
  2. public static Context mContext;
  3. private Handler handler=new Handler();
  4. protected UnityPlayer mUnityPlayer;
  5.  
  6.  
  7.  
  8. protected void onCreate(Bundle savedInstanceState) {
  9.  
  10.  
  11. requestWindowFeature(Window.FEATURE_NO_TITLE);
  12. super.onCreate(savedInstanceState);
  13. mContext = this;
  14. getWindow().takeSurface(null);
  15. setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
  16. getWindow().setFormat(PixelFormat.RGB_565);
  17.  
  18. mUnityPlayer = new UnityPlayer(this);
  19. if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar",true))
  20. getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
  21.  
  22. int glesMode = mUnityPlayer.getSettings().getInt("gles_mode",1);
  23. boolean trueColor8888 = false;
  24. mUnityPlayer.init(glesMode,trueColor8888);
  25.  
  26. View playerView = mUnityPlayer.getView();
  27.  
  28.  
  29. setContentView(R.layout.activity_main);
  30.  
  31. FrameLayout layout = (FrameLayout) findViewById(R.id.frameLayout2);
  32.  
  33. LayoutParams lp = new LayoutParams (750,630);
  34.  
  35. layout.addView(playerView,lp);
  36.  
  37. }
  38.  
  39. protected void onDestroy ()
  40. {
  41. mUnityPlayer.quit();
  42. super.onDestroy();
  43. }
  44.  
  45. // onPause()/onResume() must be sent to UnityPlayer to enable pause and resource recreation on resume.
  46. protected void onPause()
  47. {
  48. super.onPause();
  49. mUnityPlayer.pause();
  50. }
  51. protected void onResume()
  52. {
  53. super.onResume();
  54. mUnityPlayer.resume();
  55. }
  56. public void onConfigurationChanged(Configuration newConfig)
  57. {
  58. super.onConfigurationChanged(newConfig);
  59. mUnityPlayer.configurationChanged(newConfig);
  60. }
  61. public void onWindowFocusChanged(boolean hasFocus)
  62. {
  63. super.onWindowFocusChanged(hasFocus);
  64. mUnityPlayer.windowFocusChanged(hasFocus);
  65. }
  66. public boolean dispatchKeyEvent(KeyEvent event)
  67. {
  68. if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
  69. return mUnityPlayer.onKeyMultiple(event.getKeyCode(),event.getRepeatCount(),event);
  70. return super.dispatchKeyEvent(event);
  71. }
  72.  
  73. }

结果:

猜你在找的Android相关文章