JNI を使用して、c++ と Java 間の通信を確立します。UI 部分は Java で行う必要があります。srcJava フォルダーと res/layout フォルダーがあることに注意してください。ADT Eclipse アドオンがあれば、main_layout.xml に簡単なボタンを追加できるはずです。次のようなものを試してください:
<cc.openframeworks.OFGLSurfaceView android:id="@+id/of_gl_surface"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<!-- add here other views' layouts -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true" >
<LinearLayout
android:id="@+id/fullscreen_content_controls"
style="?buttonBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:background="@color/black_overlay"
android:orientation="horizontal"
tools:ignore="UselessParent">
<Button
android:id="@+id/myButton"
style="?buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Bam!" />
<!-- the text should move to a string in the values.xml -->
</LinearLayout>
</FrameLayout>
</RelativeLayout>
OFActivity.java では、次のようなことを試してください。
package cc.openframeworks.androidGuiExample;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import cc.openframeworks.OFAndroid;
public class OFActivity extends cc.openframeworks.OFActivity implements OnClickListener{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
String packageName = getPackageName();
ofApp = new OFAndroid(packageName,this);
Button myButton = (Button) findViewById(R.id.myButton);//id from layout xml
myButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
System.out.println(v);
}
@Override
public void onDetachedFromWindow() {
}
@Override
protected void onPause() {
super.onPause();
ofApp.pause();
}
@Override
protected void onResume() {
super.onResume();
ofApp.resume();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (OFAndroid.keyDown(keyCode, event)) {
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (OFAndroid.keyUp(keyCode, event)) {
return true;
} else {
return super.onKeyUp(keyCode, event);
}
}
OFAndroid ofApp;
// Menus
// http://developer.android.com/guide/topics/ui/menus.html
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Create settings menu options from here, one by one or infalting an xml
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// This passes the menu option string to OF
// you can add additional behavior from java modifying this method
// but keep the call to OFAndroid so OF is notified of menu events
if(OFAndroid.menuItemSelected(item.getItemId())){
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onPrepareOptionsMenu (Menu menu){
// This method is called every time the menu is opened
// you can add or remove menu options from here
return super.onPrepareOptionsMenu(menu);
}
}
あなたは主に の最後の行の後にいますonCreate
:
- レイアウト xml からコンポーネントにアクセスするには、findViewById を使用します。
- イベントのリスナーを設定します。異なるコンポーネントには、実装する異なるリスナーがあります。通常、フリーズを回避するために、UI スタッフ (GUI スレッド) を残りの処理から切り離すことをお勧めします。