结合画布和布局(Android)

时间:2012-10-31 09:00:38

标签: android xml layout surfaceview android-canvas

关于Android UI的问题。 当我们使用XML-layout时,我们编写(例如)

setContentView(R.layout.main);

当我们使用2D图形时,我们写

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

那么如果我想同时使用两者呢?我需要使用layout-xml,屏幕的一部分是fir绘画(Canvas)。我读到了关于surfaceView的内容,但是使用Canvas的简单方法呢?

1 个答案:

答案 0 :(得分:7)

您实际上可以从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) {
        }
    });
}
}