时间断点: 2019年7月25日16:29:25
回头看时, 希望仍然记得。
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class SurfaceViewL extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder holder;
private boolean isDraw;
Canvas canvas; //画布
Paint paint; //画笔
Path path; //路径
public SurfaceViewL(Context context) {
this(context, null);
}
public SurfaceViewL(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SurfaceL(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
//TODO 初始化
private void initView() {
holder = getHolder();
holder.addCallback(this); //事件监听
//设置可获得焦点
this.setFocusable(true);
this.setFocusableInTouchMode(true);
//设置常亮
this.setKeepScreenOn(true);
paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
//设置画笔属性
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(8f);
paint.setColor(Color.BLUE); //画笔颜色
path = new Path();
}
/**
* 创建
*
* @param holder
*/
@Override
public void surfaceCreated(final SurfaceHolder holder) {
isDraw = true;
//启动线程, 开始绘制
new Thread(new Runnable() {
@Override
public void run() {
while (isDraw) { //如果不停止, 就一直绘制
try {
canvas = holder.lockCanvas(); //画布
if (canvas != null) {
canvas.drawColor(Color.WHITE); //画布颜色
canvas.drawPath(path, paint);
}
} finally {
if (canvas != null) {
holder.unlockCanvasAndPost(canvas); //提交
}
}
}
}
}).start();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(x, y);
break;
case MotionEvent.ACTION_MOVE:
path.lineTo(x, y);
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
/**
* 清空画布
*/
public void reset() {
path.reset();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
isDraw = false;
}
}