トップページ > 記事閲覧
NativeActivityのViewについて
名前:Shimeji 日時: 2021/01/22 17:35

お世話になります。DXライブラリを有り難く使わせていただいております。 現在、Androidでゲームを開発しており、 ゲームの前面に別のビューを表示したいと考えています。 NativeActivityを使い、setContentView()や、findViewById()を使ってビューを取得するかなと試行錯誤していたのですが、 上手く行かず困っております。 お忙しいところ大変恐縮なのですが、ヒント等頂けると幸いです。 ========== public class MainActivity extends NativeActivity { // Used to load the 'native-lib' library on application startup. static { System.loadLibrary("native-lib"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); // このようなイメージです(とりあえず全面を真っ赤にしてみる)   FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); FrameLayout fLayout = new FrameLayout(this); fLayout.setBackgroundColor(Color.RED); fLayout.setLayoutParams(layoutParams); this.setContentView(fLayout, layoutParams); } } ==========
メンテ

Page: 1 |

Re: NativeActivityのViewについて ( No.1 )
名前:管理人 日時:2021/01/24 02:39

すみません、私も詳しくないので中途半端ですが、以下のようなコードで 画面の中央にボタンを表示することができました Javaコード public class MainActivity extends NativeActivity { public NativeActivity _activity; PopupWindow popUp; LinearLayout layout; LinearLayout mainLayout; Button button; public void PopupWindowTest() { _activity = this; // UIスレッドで実行する処理を登録する runOnUiThread( new Runnable() { // UIスレッドで呼ばれる関数 @Override public void run() { layout = new LinearLayout(_activity); mainLayout = new LinearLayout(_activity); button = new Button(_activity); popUp = new PopupWindow(_activity); layout.addView(button); popUp.setContentView(layout); popUp.showAtLocation(mainLayout, Gravity.CENTER, 0, 0); popUp.update(); } } ); }; } C++ コード #include "DxLib.h" int android_main( void ) { JNIEnv *env ; const ANativeActivity *NativeActivity ; // 背景を灰色にする SetBackgroundColor( 128,128,128 ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // アプリの NativeActivity を取得しておく NativeActivity = GetNativeActivity() ; // Java の関数 PopupWindowTest の呼び出し { // JavaVM とソフト実行用スレッドを関連付け( C++ から Java の機能を使用するために必要 ) if( NativeActivity->vm->AttachCurrentThreadAsDaemon( &env, NULL ) != JNI_OK ) { return -1 ; } // Java のクラス MainActivity を取得 jclass jclass_MainActivity = env->GetObjectClass( NativeActivity->clazz ) ; // Java のクラス MainActivity のメンバー関数 PopupWindowTest の ID を取得 jmethodID jmethodID_PopupWindowTest = env->GetMethodID( jclass_MainActivity, "PopupWindowTest", "()V" ) ; // Java のクラス MainActivity のメンバー関数 PopupWindowTest の呼び出し env->CallVoidMethod( NativeActivity->clazz, jmethodID_PopupWindowTest ) ; // Java のクラス MainActivity の参照を削除 env->DeleteLocalRef( jclass_MainActivity ) ; // JavaVM とソフト実行用スレッドの関連付け終了 NativeActivity->vm->DetachCurrentThread() ; } // メインループ while( ProcessMessage() == 0 ) { // 裏画面の内容をクリア ClearDrawScreen() ; // 動作確認用に TestString という文字列を描画する DrawString( 0, 100, "TestString", GetColor( 255,255,255 ) ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } NativeActivity の場合は onCreate が呼ばれないので、C++ のコードから Javaの関数を呼び出し、 その中でポップアップウィンドウ内にボタンを配置して表示しています あと、C++ から呼ばれるJavaの関数内では画面表示に関するAPIが呼べないので、runOnUiThread ... 以下の 記述で画面表示に関するAPIが呼べるスレッド上で実行される関数内で new PopupWindow(_activity); などを実行します あと、NativeActivity は this.setContentView が効果が無いようなので、ポップアップウィンドウを 使用してボタンを表示しています よろしければお試しください m(_ _)m
メンテ
Re: NativeActivityのViewについて ( No.2 )
名前:Shimeji 日時:2021/01/24 14:01

ありがとうございます!! ビューを表示することが出来ました!! おかげさまで開発を進めることが出来そうです!! "PopupWindow"がコツですね。 DXライブラリ最高です!! 素晴らしいライブラリを有難うございます!!
メンテ
Re: NativeActivityのViewについて ( No.3 )
名前:管理人 日時:2021/01/25 00:43

ビューが表示できたようで何よりです (^ ^ > "PopupWindow"がコツですね。 はい、そうみたいです 別件で Google Ads を表示したい、という案件に対応した際に、どう足掻いても 公式の『Google Adsの使い方』に載っている方法では画面に表示されず、 断念しかけていた際に海外のサイトで『Native Activity で Google Ads を表示する方法』を 解説されている方が居られて、そこで『Native Activity では PopupWindow を介して表示する』という方法を学びました… ( 解説されていた方様様です… ) > DXライブラリ最高です!! > 素晴らしいライブラリを有難うございます!! ありがとうございます! m(_ _)m お役に立つことができれば何よりです
メンテ
Re: NativeActivityのViewについて ( No.4 )
名前:Shimeji(解決) 日時:2021/01/25 17:47

大変勉強になりました。 有難うございました!!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存