package com.sxwdsoft.recyclerviewapplication; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.SurfaceHolder.Callback; import android.view.View.OnClickListener; import android.widget.Button; public class ShowActivity extends Activity { private SurfaceHolder holder; private Paint paint; final int HEIGHT = 320; final int WIDTH = 320; final int X_OFFSET = 5; private int cx = X_OFFSET; //实际的Y轴的位置 private int centerY = HEIGHT / 2; //计时器 private Timer timer = new Timer(); //计时器任务 private TimerTask task = null; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_show); final SurfaceView surface = (SurfaceView) findViewById(R.id.show); //初始化SurfaceHolder对象 holder = surface.getHolder(); paint = new Paint(); paint.setColor(Color.GREEN); paint.setStrokeWidth(3); Button sin = (Button) findViewById(R.id.sin); Button cos = (Button) findViewById(R.id.cos); OnClickListener listener = (new OnClickListener() { @Override public void onClick(final View source) { //清除画布,重新绘制画布背景 drawBack(holder); cx = X_OFFSET; if (task != null) { //取消任务 task.cancel(); } //实例化计时器任务 task = new TimerTask() { @Override public void run() { //获取有坐标 int cy = source.getId() == R.id.sin ? centerY - (int) (100 * Math.sin((cx - 5) * 2 * Math.PI / 150)) : centerY - (int) (100 * Math.cos((cx - 5) * 2 * Math.PI / 150)); //获取画布局部位置,进行绘制 Canvas canvas = holder.lockCanvas(new Rect(cx, cy - 2, cx + 2, cy + 2)); //在画布上绘制 canvas.drawPoint(cx, cy, paint); cx++; if (cx > WIDTH) { task.cancel(); task = null; } //解锁画布 holder.unlockCanvasAndPost(canvas); } }; //给计时器添加任务,0秒后启动任务,每隔30ms在此启动一次 timer.schedule(task, 0, 30); } }); //绘制郑玄曲线 sin.setOnClickListener(listener); //绘制余玄曲线 cos.setOnClickListener(listener); //给hodler添加回掉方法Callback holder.addCallback(new Callback() { //surfaceView大小发生变化 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { drawBack(holder); } //surfaceView开始创建时调用的方法 @Override public void surfaceCreated(SurfaceHolder holder) { } //surfaceview销毁时调用的方法 @Override public void surfaceDestroyed(SurfaceHolder holder) { timer.cancel(); } }); } private void drawBack(SurfaceHolder holder) { //锁定画布 Canvas canvas = holder.lockCanvas(); //绘制白色背景 canvas.drawColor(Color.WHITE); Paint p = new Paint(); //设置画笔颜色 p.setColor(Color.BLACK); //设置画笔宽度 p.setStrokeWidth(2); //绘制坐标轴 canvas.drawLine(X_OFFSET, centerY, WIDTH, centerY, p); canvas.drawLine(X_OFFSET, 40, X_OFFSET, HEIGHT, p); //解锁画布 holder.unlockCanvasAndPost(canvas); } }