本文介绍如何使用SurfaceView绘制一些简单的图形,如直线,圆形
- 首先使用Android Studio创建一个新的Project
-
创建一个Java 类 MySurfaceView 继承自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销毁的时候会响应
- 修改MainActivity, 让Activity显示MySurfaeView中的内容
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//显示MySurfaceView
setContentView(new MySurfaceView(this));
}
}
- 运行结果如下:
酷客网相关文章:
评论前必须登录!
注册