Android中导入Unity项目,界面点击事件失去焦点问题

============问题描述============


1.将Unity中的项目导出成Android项目,再放入到Eclipse中,然后新建一个Android项目,以Unity那个项目为类库。
2.然后我开始写一个xml布局,布局中间是一个LinearLayout,上下分别是Button。LinearLayout用来放Unity里的内容。
现在遇到的问题是如果再Unity画面加载完成之前,按钮的点击事件是可以执行的。当Unity加载完成以后,按钮就失效了。根本点不了。是因为Unity盖住了整个屏幕还是占据了整个焦点?现在不知道是应该在Unity代码里面改还是在Android里面改,有大神知道么?
下面附上代码:
package com.t.t;



import com.unity3d.player.UnityPlayer;

import com.unity3d.player.UnityPlayerNativeActivity;



import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.Toast;





public class MainActivity extends UnityPlayerNativeActivity{



	private LinearLayout unity;

	

	private Button round,right,left;

	

	private String Tag="Unity3D";

	@Override

	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		

		//设置布局文件

		setContentView(R.layout.test);

		

		

		//mUnityPlayer为一个全局的引用变量,而且已 经在父类中设置好了,所以直接拿来用就可以了

		View playerView = mUnityPlayer.getView();

		//将Unity的视图添加到我们为其准备的父容器中

		unity = (LinearLayout) findViewById(R.id.unity);

		playerView.setOnClickListener(new View.OnClickListener() {

			

			@Override

			public void onClick(View v) {

				// TODO Auto-generated method stub

				Toast.makeText(MainActivity.this, "222222", Toast.LENGTH_LONG).show();

			}

		});

		

		unity.addView(playerView);

		

		round = (Button) findViewById(R.id.trun_round);

		round.setOnClickListener(new View.OnClickListener() {

			

			@Override

			public void onClick(View v) {

				// TODO Auto-generated method stub

				UnityPlayer.UnitySendMessage("shouchengchangmaobing", "Answer", "3");

				

			}

		});

		left = (Button) findViewById(R.id.left);

		left.setOnClickListener(new View.OnClickListener() {

			

			@Override

			public void onClick(View v) {

				// TODO Auto-generated method stub

				UnityPlayer.UnitySendMessage("shouchengchangmaobing", "Answer", "1");

			}

		});

		

	}

}


package com.t.t;



import com.unity3d.player.*;

import android.app.NativeActivity;

import android.content.res.Configuration;

import android.graphics.PixelFormat;

import android.os.Bundle;

import android.view.KeyEvent;

import android.view.MotionEvent;

import android.view.Window;

import android.view.WindowManager;



public class UnityPlayerNativeActivity extends NativeActivity

{

	protected UnityPlayer mUnityPlayer;		// don't change the name of this variable; referenced from native code



	// Setup activity layout

	@Override protected void onCreate (Bundle savedInstanceState)

	{

		requestWindowFeature(Window.FEATURE_NO_TITLE);

		super.onCreate(savedInstanceState);



		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);



		setContentView(mUnityPlayer);

		mUnityPlayer.requestFocus();

	}



	// Quit Unity

	@Override protected void onDestroy ()

	{

		mUnityPlayer.quit();

		super.onDestroy();

	}



	// Pause Unity

	@Override protected void onPause()

	{

		super.onPause();

		mUnityPlayer.pause();

	}



	// Resume Unity

	@Override protected void onResume()

	{

		super.onResume();

		mUnityPlayer.resume();

	}



	// This ensures the layout will be correct.

	@Override public void onConfigurationChanged(Configuration newConfig)

	{

		super.onConfigurationChanged(newConfig);

		mUnityPlayer.configurationChanged(newConfig);

	}



	// Notify Unity of the focus change.

	@Override public void onWindowFocusChanged(boolean hasFocus)

	{

		super.onWindowFocusChanged(hasFocus);

		mUnityPlayer.windowFocusChanged(hasFocus);

	}



	// For some reason the multiple keyevent type is not supported by the ndk.

	// Force event injection by overriding dispatchKeyEvent().

	@Override public boolean dispatchKeyEvent(KeyEvent event)

	{

		if (event.getAction() == KeyEvent.ACTION_MULTIPLE)

			return mUnityPlayer.injectEvent(event);

		return super.dispatchKeyEvent(event);

	}



	// Pass any events not handled by (unfocused) views straight to UnityPlayer

	@Override public boolean onKeyUp(int keyCode, KeyEvent event)     { return mUnityPlayer.injectEvent(event); }

	@Override public boolean onKeyDown(int keyCode, KeyEvent event)   { return mUnityPlayer.injectEvent(event); }

	@Override public boolean onTouchEvent(MotionEvent event)          { return mUnityPlayer.injectEvent(event); }

	/*API12*/ public boolean onGenericMotionEvent(MotionEvent event)  { return mUnityPlayer.injectEvent(event); }

}



<?xml version="1.0" encoding="utf-8"?>  

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:layout_width="match_parent"  

    android:layout_height="match_parent"  

    android:orientation="vertical" >  

  

    <Button  

        android:id="@+id/trun_round"  

        android:layout_width="match_parent"  

        android:layout_height="wrap_content"  

        android:layout_alignParentTop="true"  

        android:text="around" />  

  

    <LinearLayout

        android:id="@+id/unity"

        android:layout_width="100dp"

        android:layout_height="200dp"

        android:layout_below="@+id/trun_round"

        android:background="#ccffcc"

        android:orientation="horizontal" >

  

    </LinearLayout>  

  

    <Button  

        android:id="@+id/left"  

        android:layout_width="match_parent"  

        android:layout_height="wrap_content"  

        android:layout_alignParentBottom="true"

        android:text="left" />  

  

</RelativeLayout>  

============解决方案1============


Unity盖住了整个屏幕???
按钮可见能点击不?
posted @ 2014-10-17 10:29  android应用开发  阅读(365)  评论(0编辑  收藏  举报
我要啦免费统计