1

問題は、アクティビティで一種のSurfaceViewを使用していて、それにボタンを追加したいということです。

私の質問は次のとおりです。

1)findViewById(...)を呼び出さずにボタンのインスタンスを作成するにはどうすればよいですか?(surfaceViewのためにレイアウトがないため)...

2)このボタンをキャンバスに描画するにはどうすればよいですか?

または多分あなたは何か他のことをすることを提案していますか?

私が気にしているのは、画面にボタンがあり、OnClickListener(...)....のようなものを実装できることだけです。

よろしくお願いします!!!

4

2 に答える 2

11

setOnClickListener xmlなしでアクティビティにボタンとして追加します。

@Override  
        protected void onCreate(Bundle savedInstanceState) {  
            // TODO Auto-generated method stub  
            super.onCreate(savedInstanceState);  

            Button button= new Button (this);  
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(  
            FrameLayout.LayoutParams.WRAP_CONTENT,  
            FrameLayout.LayoutParams.WRAP_CONTENT);   
            params.topMargin = 0;  
            params.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;  

            button.setText("dynamic Button");  
            addContentView(button, params);  
            // setContentView(tv);  
            button.setOnClickListener(new Button.OnClickListener(){  
            @Override  
            public void onClick(View v) {  

            }  

        });  
  }  
于 2012-07-09T20:25:57.723 に答える
2

キャンバスにボタンを描画すると(これは可能です)、クリックできなくなります。あなたが本当に欲しいのは:

  • SurfaceViewをフレームレイアウトにラップします。同じレイアウトに他のビューも追加すると、SurfaceViewの上に表示されます。
  • 上記のフレームレイアウトに相対レイアウトを追加します(ボタンと場合によっては他のビューを配置できるようにします。ボタンしかない場合は、余白を設定するだけで済む場合があります)。

そのようです:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/FrameLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <SurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <Button
            android:id="@+id/restartButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:onClick="whatever"
            android:text="look, I float above the SurfaceView!" />

    </RelativeLayout>

</FrameLayout>
于 2012-07-09T20:24:49.010 に答える