package com.zzw.TestSurfaceView;

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.util.DisplayMetrics;
import android.view.SurfaceHolder;
import android.view.SurfaceView; /**
* Created by zzw on 2016/6/28.
* 描述:
*/
public class SinSurfaceView extends SurfaceView implements SurfaceHolder.Callback, Runnable { private int mWidth;
private int mHeight; private double angle = 0; private SurfaceHolder mHolder;
/**
* 与SurfaceHolder绑定的Canvas
*/
private Canvas mCanvas;
/**
* 用于绘制的线程
*/
private Thread t;
/**
* 线程的控制开关
*/
private boolean isRunning; public SinSurfaceView(Context context) {
this(context, null);
} public SinSurfaceView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
} public SinSurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr); DisplayMetrics dm = getResources().getDisplayMetrics();
mWidth = dm.widthPixels;
mHeight = dm.heightPixels; mHolder = getHolder();
mHolder.addCallback(this); // setZOrderOnTop(true);// 设置画布 背景透明
// mHolder.setFormat(PixelFormat.TRANSLUCENT); //设置可获得焦点
setFocusable(true);
setFocusableInTouchMode(true);
//设置常亮
this.setKeepScreenOn(true); } @Override
public void surfaceCreated(SurfaceHolder holder) {
isRunning = true;
t = new Thread(this);
t.start();
} @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override
public void surfaceDestroyed(SurfaceHolder holder) {
// 通知关闭线程
isRunning = false;
} @Override
public void run() { // 不断的进行draw
while (isRunning) {
draw();
}
} private void drawCoordinates() {
Path mPath = new Path();
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);//设置画笔类型
paint.setAntiAlias(true);//抗锯齿
paint.setStyle(Paint.Style.STROKE);//设置为空心 mCanvas.translate(20, mHeight / 2);// 将画布坐标原点移动到中心位置
//绘制坐标原点
paint.setColor(Color.RED);//设置画笔颜色
paint.setStrokeWidth(10);//为了看得清楚,设置了较大的画笔宽度
//绘制坐标轴4个断点
mCanvas.drawPoints(new float[]{0, 0,
mWidth * 0.9f, 0
, mWidth * 0.9f * 0.75f, 0
, mWidth * 0.9f * 0.5f, 0
, mWidth * 0.9f * 0.25f, 0}, paint); paint.setStrokeWidth(1);//恢复画笔默认宽度 mCanvas.drawLine(0, 0, mWidth * 0.9f, 0, paint);
mCanvas.drawLine(0, -mHeight / 2 * 0.9f, 0, mHeight / 2 * 0.9f, paint); mPath.moveTo(mWidth * 0.9f * 0.95f, -mWidth * 0.9f * 0.05f);
mPath.lineTo(mWidth * 0.9f, 0);
mPath.lineTo(mWidth * 0.9f * 0.95f, mWidth * 0.9f * 0.05f);
//绘制Path
mCanvas.drawPath(mPath, paint);
} private void drawSin() {
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);//设置画笔类型
paint.setAntiAlias(true);//抗锯齿
paint.setStyle(Paint.Style.STROKE);//设置为空心
paint.setStrokeWidth(5);
//绘制坐标原点
paint.setColor(Color.RED);//设置画笔颜色 double x = mWidth * 0.9f * (angle / 360);
// double y = Math.sin((Math.PI / 180) * angle) * mWidth * 0.9f * 0.2;// π/180乘于角度为弧度
// mCanvas.drawPoint((float) x, -(float) y, paint);
for (int i = 1; i < 6; i++) {
double y = Math.sin((Math.PI / 180) * angle) * mWidth * 0.9f * 0.15 * i;// π/180乘于角度为弧度
mCanvas.drawPoint((float) x, -(float) y, paint);
} angle += 1;
if (angle > 360) {
isRunning = false;
}
} private void draw() {
try {
Thread.sleep(1);
// 获得canvas
mCanvas = mHolder.lockCanvas();
if (mCanvas != null) {
drawCoordinates();
drawSin();
}
} catch (Exception e) {
} finally {
if (mCanvas != null)
mHolder.unlockCanvasAndPost(mCanvas);
}
}
}

最新文章

  1. JDBC步骤
  2. UIColletionView 的属性与常用方法介绍
  3. UIDevice通知
  4. 一个JAVA代码
  5. 【LeetCode】 String中的最长回文
  6. linux 挂在win下文件
  7. Go 语言常量
  8. oracle索引建立和删除
  9. BTrace 问题辅助排查工具使用手册
  10. MySQL控制台执行.sql脚本文件
  11. 2、JDBC-CURD
  12. 修改weblogic的端口
  13. Java知多少(20)变量的作用域
  14. Ubuntu 16.04 中安装谷歌 Chrome 浏览器
  15. Redhat(RHEL)配置静态IP
  16. 学习Java你必须了解的知识
  17. laravel 使用 session
  18. 学习python的第五天
  19. 六、Django之Template
  20. ionic 开发实例

热门文章

  1. 全球第一张中文网络协议分析图——By 成都科来软件
  2. mysql 如何找出两张表之间的关系
  3. Chrome调试模式获取App混合应用H5界面元素
  4. 访问url
  5. java二叉排序树
  6. C#转义字符(好记性不如烂笔头)
  7. JavaScript:隐藏Url中的参数
  8. Alluxio 安装与配置
  9. 20145235李涛《网络对抗》Exp2 后门原理与实践
  10. Gentoo系统安装步骤详解