public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
// setContentView(new MySurface(this, 200,200));
setContentView(new sinview(this));
// setContentView(new touchdraw(this));
}
显示一个小蓝方块
public class MyView extends SurfaceView implements SurfaceHolder.Callback
{
/**
* @param context
*/
SurfaceHolder holder;
public MyView(Context context) {
super(context);
// TODO Auto-generated constructor stub
holder=this.getHolder();
holder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
new Thread(new MyThread()).start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
class MyThread implements Runnable
{
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
// TODO Auto-generated method stub
Canvas canvas = holder.lockCanvas(null);//获取画布
Paint mPaint = new Paint();
mPaint.setColor(Color.BLUE);
canvas.drawRect(new RectF(40,60,80,80), mPaint); //前2个参数代表右上角坐标,后2个参数代表右下角坐标
holder.unlockCanvasAndPost(canvas);//解锁画布,提交画好的图像
}
}
}
正弦:
package com.coinvs.testsurfaceview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
/**
* Created by 七喜 on 2017/5/3.
*/
public class sinview extends SurfaceView implements SurfaceHolder.Callback, Runnable {
private SurfaceHolder holder;
private Canvas mCanvas;
private Paint mPaint;
private Path mPath;
public sinview(Context context) {
super(context);
holder=this.getHolder();
holder.addCallback(this);
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPath = new Path();
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(5);
y = (int)(100*Math.sin(x*2*Math.PI/180)+400);
mPath.moveTo(x, y);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
Thread t = new Thread(this);
t.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
int x = 0;
int y;
@Override
public void run() {
while(true){
x +=1;
y = (int)(100*Math.sin(x*2*Math.PI/180)+400);
mPath.lineTo(x,y);
draw();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void draw(){
mCanvas = holder.lockCanvas();
if(mCanvas != null) {
mCanvas.drawColor(Color.BLUE);
mCanvas.drawPath(mPath, mPaint);
holder.unlockCanvasAndPost(mCanvas);
}
}
}
画图
package com.coinvs.testsurfaceview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
/**
* Created by 七喜 on 2017/5/3.
*/
public class touchdraw extends SurfaceView implements SurfaceHolder.Callback, Runnable {
private SurfaceHolder holder;
private Canvas mCanvas;
private Paint mPaint;
private Path mPath;
private boolean mIsDrawing;
public touchdraw(Context context) {
super(context);
holder=this.getHolder();
holder.addCallback(this);
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPath = new Path();
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(5);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mPath.moveTo(x, y);
break;
case MotionEvent.ACTION_MOVE:
mPath.lineTo(x, y);
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
private void draw(){
mCanvas = holder.lockCanvas();
mCanvas.drawColor(Color.WHITE);
mCanvas.drawPath(mPath,mPaint);
holder.unlockCanvasAndPost(mCanvas);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mIsDrawing = true;
Thread t = new Thread(this);
t.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mIsDrawing = false;
}
@Override
public void run() {
while(mIsDrawing){
draw();
}
}
}