public class MyView14 extends SurfaceView implements Runnable, SurfaceHolder.Callback {
public MyView14(Context context) {
super(context);
init();
}
public MyView14(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyView14(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private int x = 0;
private int h = 800;
private int y = h;
private Paint mPaint;
private Path mPath;
private SurfaceHolder mHolder;
private Canvas mCanvas;
private boolean mIsDrawing;
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
Log.e("---------", "surfaceCreated: --------------");
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(20);
mIsDrawing = true;
mPath = new Path();
mPath.moveTo(0, h);
new Thread(this).start();
}
private void init() {
Log.e("---------", "init: --------------");
mHolder = getHolder();
mHolder.addCallback(this);
//用键盘能否获取到焦点
setFocusable(true);
//触屏能否获取到焦点
setFocusableInTouchMode(true);
setKeepScreenOn(true);
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
Log.e("---------", "surfaceChanged: --------------");
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
Log.e("---------", "surfaceDestroyed: --------------");
mIsDrawing = false;
}
@Override
public void run() {
Log.e("---------", "run: --------------");
while (mIsDrawing && x < getWidth() / 2) {
draw();
x++;
y = (int) (100 * Math.sin(2 * x * Math.PI / 180) + 800);
mPath.lineTo(x, y);
}
}
private void draw() {
Log.e("---------", "draw: --------------");
try {
mCanvas = mHolder.lockCanvas();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mCanvas.drawPath(mPath, mPaint);
} catch (Exception e) {
} finally {
if (mCanvas != null) {
mHolder.unlockCanvasAndPost(mCanvas);
}
}
}
}