6

Android UI についての質問です。XML レイアウトで作業するときは、次のように記述します (たとえば)

setContentView(R.layout.main);

そして、2Dグラフィックスを扱うときは、次のように書きます

Draw2D d = new Draw2D(this);
setContentView(d);

では、両方を使いたい場合はどうすればよいでしょうか。私はlayout-xmlを使用する必要があり、画面の一部がもみ絵(キャンバス)です。surfaceView について読みましたが、Canvas を使用した単純な方法についてはどうでしょうか。

4

1 に答える 1

9

XML ファイルから実際にレイアウトを膨らませてから、任意のビューを取得して描画することができます。SurfaceView は、描画に特に便利です。

以下に例を示します。

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <SurfaceView
        android:id="@+id/surface"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

TestActivity.java:

public class TestActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    SurfaceView surface = (SurfaceView) findViewById(R.id.surface);
    surface.getHolder().addCallback(new Callback() {

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            // Do some drawing when surface is ready
            Canvas canvas = holder.lockCanvas();
            canvas.drawColor(Color.RED);
            holder.unlockCanvasAndPost(canvas);
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        }
    });
}
}
于 2012-10-31T10:00:01.400 に答える