Lua-AndroidStudio配置Luaj案例2

7.2 AndroidStudio配置Luaj案例2(添加View)

7.2.1 简介

此案例是整合Luaj提供的Android案例,Lua生成View显示在Activity中;

7.2.2 拷贝luaj的jar到项目中

解压下载压缩包,拷贝lib文件夹下的luaj-jse-3.0.1.jar到AdroidStudio项目模块的libs目录下,然后添加jar引用到gradle,

 implementation files('libs/luaj-jse-3.0.1.jar')

7.2.3 创建一个View类并实现ResourceFinder接口

应提供专门的Globals.finder来查找用于加载的脚本和数据。

可以参考:Luaj的Android项目中的LuajView类

public class LuajView extends View implements ResourceFinder {

	public final Globals globals;

	public LuajView(Context context) {
		super(context);
		this.globals = JsePlatform.standardGlobals();
		this.globals.finder = this;
	}

	// Implement a finder that loads from the assets directory.
	public InputStream findResource(String name) {
		try {
			return getContext().getAssets().open(name);
		} catch (java.io.IOException ioe) {
			return null;
		}
	}

	
	public void draw(Canvas canvas) {
		LuaValue f = globals.get("draw");
		if (!f.isnil())
			try {
				f.call(CoerceJavaToLua.coerce(canvas));
			} catch (Exception e) {
				e.printStackTrace();
			}
		else
			super.draw(canvas);
	}

	public boolean f(int keyCode, KeyEvent event) {
		LuaValue f = globals.get("onKeyDown");
		if (!f.isnil())
			try {
				return f.call(CoerceJavaToLua.coerce(keyCode),
						CoerceJavaToLua.coerce(event)).toboolean();
			} catch (Exception e) {
				e.printStackTrace();
				return true;
			}
		else
			return super.onKeyDown(keyCode, event);
	}

	public boolean onKeyUp(int keyCode, KeyEvent event) {
		LuaValue f = globals.get("onKeyUp");
		if (!f.isnil())
			try {
				return f.call(CoerceJavaToLua.coerce(keyCode),
						CoerceJavaToLua.coerce(event)).toboolean();
			} catch (Exception e) {
				e.printStackTrace();
				return true;
			}
		else
			return super.onKeyUp(keyCode, event);
	}

	public boolean onTouchEvent(MotionEvent event) {
		LuaValue f = globals.get("onTouchEvent");
		if (!f.isnil())
			try {
				return f.call(CoerceJavaToLua.coerce(event)).toboolean();
			} catch (Exception e) {
				e.printStackTrace();
				return true;
			}
		else
			return super.onTouchEvent(event);
	}

	public boolean onTrackballEvent(MotionEvent event) {
		LuaValue f = globals.get("onTrackballEvent");
		if (!f.isnil())
			try {
				return f.call(CoerceJavaToLua.coerce(event)).toboolean();
			} catch (Exception e) {
				e.printStackTrace();
				return true;
			}
		else
			return super.onTrackballEvent(event);
	}

	public void onWindowFocusChanged(boolean hasWindowFocus) {
		LuaValue f = globals.get("onWindowFocusChanged");
		if (!f.isnil())
			try {
				f.call(CoerceJavaToLua.coerce(hasWindowFocus));
			} catch (Exception e) {
				e.printStackTrace();
			}
	}

	public void onWindowSystemUiVisibilityChanged(int visible) {
		LuaValue f = globals.get("onWindowSystemUiVisibilityChanged");
		if (!f.isnil())
			try {
				f.call(CoerceJavaToLua.coerce(visible));
			} catch (Exception e) {
				e.printStackTrace();
			}
	}

7.2.4 创建LuajView对象

 ll_main = (LinearLayout)findViewById(R.id.ll_main);
 luajView = new LuajView(MainActivity.this);

7.2.5 拷贝activity.lua文件

拷贝Luaj项目中的activity.lua文件到assets中;

7.2.6 加载activity.lua文件并调用函数

  try {
            //添加View到Activity界面
            ll_main.addView(luajView);

            //Activity和View转换,作为参数进行传达
            LuaValue activityVal = CoerceJavaToLua.coerce(MainActivity.this);
            LuaValue viewObj = CoerceJavaToLua.coerce(luajView);

            luajView.globals.loadfile("activity.lua").call(activityVal, viewObj);
        } catch (Exception ioe) {
            ioe.toString();
        }

运行结果:

代码下载:https://download.csdn.net/download/niuba123456/10566261

猜你喜欢

转载自blog.csdn.net/niuba123456/article/details/81223614