Lua学習2)——AndroidとLuaの相互調整

2187 ワード

2014-07-09
一、Android類はluaを呼び出してコールバックする
AndroidはLua関数を呼び出し,同時にクラスをパラメータとして渡す.そしてLuaのコールバッククラスの関数
呼び出しlua
		mLuaState = LuaStateFactory.newLuaState();
		mLuaState.openLibs();
		mLuaState.LdoString(KKLua.loadAssetsString(mContext, "lua/swallow.lua"));// lua      
		mLuaState.getField(LuaState.LUA_GLOBALSINDEX, "luaUpdate");//  lua  function
		mLuaState.pushJavaObject(this);//    
		mLuaState.call(1, 0);//    , 0    

コールバックインタフェース
	public void luaDraw(int imageId, int x, int y, int scale) {//       public, lua     
		System.out.println("imageId, x, y, scale: " + imageId + ", " + x + ", " + y + ", " + scale);
	}

luaコード
function luaUpdate(luaCanvas)
  luaCanvas:luaDraw(0, 1, 2, 1)
end

二、luajava紹介(
LuaJavaライブラリに含まれている)
luaにはクラスはありません.luajavaライブラリには、java内のクラスを作成できるluajavaがあります.を呼び出します.
以下、いくつかの方法を紹介します.
①newInstance(className, ...)
説明:クラス名に基づいてJavaクラスを作成できます.同じ時点でlua変数がJavaクラスに対応することを返します.これによりluaではJavaのメソッドを直接呼び出すことができる.
obj = luajava.newInstance("java.lang.Object")
-- obj is now a reference to the new object
-- created and any of its methods can be accessed.

-- this creates a string tokenizer to the "a,b,c,d"
-- string using "," as the token separator.
strTk = luajava.newInstance("java.util.StringTokenizer", 
    "a,b,c,d", ",")
while strTk:hasMoreTokens() do
    print(strTk:nextToken())
end

②bindClass(className)
説明:luaの変数に対応するJavaのクラス(クラスです.インスタンスではありません)を作成し、luaの変数でインスタンスを作成し、静的クラスを呼び出すことができます.
sys = luajava.bindClass("java.lang.System")
print ( sys:currentTimeMillis() )

-- this prints the time returned by the function.

③new(javaClass)
説明:これは②に基づいて作成されたものです
str = luajava.bindClass("java.lang.String")
strInstance = luajava.new(str)

④createProxy(interfaceNames, luaObject)
⑤loadLib(className, methodName)
この2つの方法は今のところまだ使われていない.後で使って紹介します
以上です.ありがとう!