コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

画面の縦と横の切り替え

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待つようにしました。

以上。