首页 > 技术文章 > Android中导入Unity项目,界面点击事件失去焦点问题

lengyanyue39 2014-09-29 17:10 原文

package com.t.t;

\n\rimport com.unity3d.player.*;

\n\rimport android.app.NativeActivity;

\n\rimport android.content.res.Configuration;

import android.graphics.PixelFormat;

\n\rimport 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);

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

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

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

 }}

推荐阅读