画面の縦と横の切り替え
Luaridaに画面切り替えコマンドを実装しました。切り替えのやり方を防備録として書いておきます。
マニフェストへの追加設定
画面を切り替え時にAndroidのActivityの状態遷移割り込みが走って欲しくなかったので、マニフェストのactivityに、android:configChanges="orientation" を追記しました。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.momoonga.luarida" android:versionCode="29" android:versionName="1.61 Beta"> <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="false"> <activity android:name=".LuaridaActivity" android:label="@string/app_name" android:screenOrientation="landscape" android:configChanges="orientation" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="file" android:mimeType="text/*" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="4" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> </manifest>
画面切り替えメソッド
画面を切り替えるメソッドの追加。とりあえず、SurfaceViewの継承クラス内に作りました。
private void setScreen(byte[] byteDat) { if( byteDat[4]==1 ){ //縦向き画面 ((Activity)getContext()).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else{ //横向き画面 ((Activity)getContext()).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } }
onSizeChangedに処理追加
Luarida内部で、画面サイズに基づいて表示処理をしているので、画面サイズが変更されたときに連動してRectの値が変更されるように処理追加。
@Override protected void onSizeChanged(int w, int h, int oldw, int oldh){ puViewW = w; puViewH = h; //RectCanvasDrawを再設定します prLuaridaCB.setRectCanvasDraw(); }
LuaVMにwait処理追加
Luaの処理が速くて、onSizeChanged()割り込みが掛かる前に処理が進んでいってしまうので、少し調整することにしました。画面の縦横切り替えは高速処理を求められないと思うので、system.setScreen()コマンドが実行されたときに、常に500ms待つようにしました。
以上。