Lua学习 2) —— Android与Lua互调

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库中有个luajava能够创建java中的类。并调用。

以下介绍几个方法

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

这两个方法眼下还没用到。以后会用了再介绍

以上。谢谢!

转载于:https://www.cnblogs.com/gcczhongduan/p/4572974.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值