Lua学習2)——AndroidとLuaの相互調整
2187 ワード
2014-07-09
一、Android類はluaを呼び出してコールバックする
AndroidはLua関数を呼び出し,同時にクラスをパラメータとして渡す.そしてLuaのコールバッククラスの関数
呼び出しlua
コールバックインタフェース
二、luajava紹介(
LuaJavaライブラリに含まれている)
luaにはクラスはありません.luajavaライブラリには、java内のクラスを作成できるluajavaがあります.を呼び出します.
以下、いくつかの方法を紹介します.
①newInstance(className, ...)
説明:クラス名に基づいてJavaクラスを作成できます.同じ時点でlua変数がJavaクラスに対応することを返します.これによりluaではJavaのメソッドを直接呼び出すことができる.
②bindClass(className)
説明:luaの変数に対応するJavaのクラス(クラスです.インスタンスではありません)を作成し、luaの変数でインスタンスを作成し、静的クラスを呼び出すことができます.
③new(javaClass)
説明:これは②に基づいて作成されたものです
④createProxy(interfaceNames, luaObject)
⑤loadLib(className, methodName)
この2つの方法は今のところまだ使われていない.後で使って紹介します
以上です.ありがとう!
一、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つの方法は今のところまだ使われていない.後で使って紹介します
以上です.ありがとう!