使用SurfaceView绘制图形

本文介绍如何使用SurfaceView绘制一些简单的图形,如直线,圆形

  1. 首先使用Android Studio创建一个新的Project
    使用SurfaceView绘制图形

  2. 创建一个Java 类 MySurfaceView 继承自SurfaceView
    使用SurfaceView绘制图形

详细代码如下:

class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {

    private Canvas canvas;
    SurfaceHolder myholder;

    public MySurfaceView(Context context) {
        super(context);
        System.out.println("MySurfaceView Constructor");
        myholder = getHolder();
        myholder.addCallback(this);
    }

    @Override
    public void surfaceCreated(@NonNull SurfaceHolder surfaceHolder) {
        System.out.println("surfaceCreated");

        canvas=myholder.lockCanvas();
        //设置画笔为红色
        Paint paint=new Paint();
        paint.setColor(Color.RED);
        //绘制直线
        canvas.drawLine(500, 500, 1000, 1000, paint);
        //绘制圆形
        canvas.drawCircle(500, 500, 200, paint);
        myholder.unlockCanvasAndPost(canvas);
    }

    @Override
    public void surfaceChanged(@NonNull SurfaceHolder surfaceHolder, int i, int i1, int i2) {
        System.out.println("surfaceChanged");
    }

    @Override
    public void surfaceDestroyed(@NonNull SurfaceHolder surfaceHolder) {
        System.out.println("surfaceDestroyed");
    }
}

其中getHolder() 返回 SurfaceHolder 的对象,通过SurfaceHolder对象可以操作Surface,如改变size, color format, 可以通过 canvas 绘制Surface(myholder.lockCanvas()), 也可以直接拿到 surface 去做处理。

需要为SurfaceHolder设置callback(myholder.addCallback(this)),callback需要实现接口SurfaceHolder.Callback,它的三个函数决定的Surface的生命周期

  • surfaceCreated: 当Surface创建的时候会响应
  • surfaceChanged: Surface第一次创建,或者surface format, size等发生改变时会响应
  • surfaceDestroyed: Surface销毁的时候会响应
  1. 修改MainActivity, 让Activity显示MySurfaeView中的内容
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //显示MySurfaceView
        setContentView(new MySurfaceView(this));
    }
}
  1. 运行结果如下:

使用SurfaceView绘制图形

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!