正弦余弦曲线的绘制动画
2014-12-27 17:27
615 查看
使用SurfaceView实现正弦余弦曲线的绘制动画!
主要代码如下:
主要代码如下:
package com.example.surfaceviewtest; 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.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; public class ShowWave extends Activity { SurfaceView surfaceView; SurfaceHolder holder; Paint paint; final int HEIGHT = 320; final int WIDTH = 320; final int X_OFFSET = 5; private int cx = X_OFFSET; int CenterY = HEIGHT / 2; Timer timer; TimerTask task = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); surfaceView = (SurfaceView) findViewById(R.id.show); holder = surfaceView.getHolder(); holder.addCallback(new Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.i("csx", "surfaceDestroyed"); timer.cancel(); } @Override public void surfaceCreated(SurfaceHolder holder) { Log.i("csx", "surfaceCreated"); timer = new Timer(); drawBack(holder); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.i("csx", "surfaceChanged"); } }); paint = new Paint(); paint.setColor(Color.GREEN); paint.setStrokeWidth(3); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); drawWave(id); return super.onOptionsItemSelected(item); } public void drawWave(final int item_id) { if (task != null) { task.cancel(); } drawBack(holder); cx = X_OFFSET; task = new TimerTask() { @Override public void run() { int cy = item_id == 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)); try { 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); } catch (NullPointerException e) { return; } } }; timer.schedule(task, 0, 30); } private void drawBack(SurfaceHolder holder) { Canvas canvas = holder.lockCanvas(); canvas.drawColor(Color.WHITE); Paint p = new Paint(); p.setColor(Color.BLACK); p.setStrokeWidth(3); canvas.drawLine(X_OFFSET, CenterY, WIDTH, CenterY, p); canvas.drawLine(X_OFFSET, 40, X_OFFSET, HEIGHT, p); holder.unlockCanvasAndPost(canvas); holder.lockCanvas(new Rect(0, 0, 0, 0)); holder.unlockCanvasAndPost(canvas); } }
相关文章推荐
- Silverlight动画基础八:动画与三角函数-绘制正弦/余弦曲线
- 正弦余弦曲线的绘制动画
- 控制台绘制正弦曲线和余弦曲线同时显示
- matplotlib绘制正弦和余弦曲线
- 控制台绘制正弦/余弦曲线
- 绘制正弦曲线和余弦曲线
- 用VB绘制正弦动画曲线
- 使用plot绘制正弦与与余弦函数曲线图实例代码
- 控制台绘制正弦/余弦曲线
- Python使用matplotlib绘制正弦和余弦曲线的方法示例
- 控制台绘制正弦曲线和余弦曲线同时显示
- 控制台绘制正弦/余弦曲线
- Python图形绘制操作之正弦曲线实现方法分析
- 如何利用Visio画标准的正弦或余弦曲线
- C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码
- 【C#】第3章补充(一)如何在WPF中绘制正弦曲线
- 正弦与余弦曲线的波形图显示(数组与簇)
- 用acos(x)绘制余弦曲线
- 绘制余弦曲线
- 用C语言绘制一条标准的余弦曲线