private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0:
if (isStart) { // if(i>2)
// {
// isStart = false;
// return;
// }
i += 1;
double y = (Math.PI * i) / 180;
if (i <= 360) {
if( i<= 90){ px = (float)radio + radio * (float) Math.sin(y);
py = (float)radio - radio * (float) Math.cos(y); px2 = (float)radio - radio * (float) Math.sin(y);
py2 = (float)radio + radio * (float) Math.cos(y);
}
else { px = radio + radio * (float) Math.sin(y);
py = radio - radio * (float) Math.cos(y); px2 = radio - radio * (float) Math.sin(y);
py2 = radio + radio * (float) Math.cos(y);
}
// px = radio + radio * (float) Math.sin(y);
// py = radio - radio * (float) Math.cos(y);
//
//
//
// px2 = radio - radio * (float) Math.sin(y);
// py2 = radio + radio * (float) Math.cos(y); if (i == 360) {
i = 0;
} } invalidate();
// handler.sendEmptyMessageDelayed(0,10);
}
break;
default:
break;
}
};
};
 /**
* 比onDraw先执行
* <p>
* 一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求。
* 一个MeasureSpec由大小和模式组成
* 它有三种模式:UNSPECIFIED(未指定),父元素部队自元素施加任何束缚,子元素可以得到任意想要的大小;
* EXACTLY(完全),父元素决定自元素的确切大小,子元素将被限定在给定的边界里而忽略它本身大小;
* AT_MOST(至多),子元素至多达到指定大小的值。
* <p>
* 它常用的三个函数:
* 1.static int getMode(int measureSpec):根据提供的测量值(格式)提取模式(上述三个模式之一)
* 2.static int getSize(int measureSpec):根据提供的测量值(格式)提取大小值(这个大小也就是我们通常所说的大小)
* 3.static int makeMeasureSpec(int size,int mode):根据提供的大小值和模式创建一个测量值(格式)
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final int minimumWidth = getSuggestedMinimumWidth();
final int minimumHeight = getSuggestedMinimumHeight(); int width = measureWidth(minimumWidth, widthMeasureSpec);
int height = measureHeight(minimumHeight, heightMeasureSpec); radio = getMeasuredWidth()/ 2; px = Math.min(width,height) / 2;
py = 0;
px2 = Math.min(width,height) / 2;
py2 = Math.min(width,height) / 2;
setMeasuredDimension(width, height);
} private int measureWidth(int defaultWidth, int measureSpec) { int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec); switch (specMode) {
case MeasureSpec.AT_MOST:
defaultWidth = getPaddingLeft() + getPaddingRight();
break;
case MeasureSpec.EXACTLY: defaultWidth = specSize;
break;
case MeasureSpec.UNSPECIFIED: defaultWidth = Math.max(defaultWidth, specSize);
}
return defaultWidth;
} private int measureHeight(int defaultHeight, int measureSpec) { int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec); switch (specMode) {
case MeasureSpec.AT_MOST:
defaultHeight = getPaddingTop() + getPaddingBottom(); break;
case MeasureSpec.EXACTLY:
defaultHeight = specSize; break;
case MeasureSpec.UNSPECIFIED:
defaultHeight = Math.max(defaultHeight, specSize); // 1.基准点是baseline
// 2.ascent:是baseline之上至字符最高处的距离
// 3.descent:是baseline之下至字符最低处的距离
// 4.leading:是上一行字符的descent到下一行的ascent之间的距离,也就是相邻行间的空白距离
// 5.top:是指的是最高字符到baseline的值,即ascent的最大值
// 6.bottom:是指最低字符到baseline的值,即descent的最大值 break;
}
return defaultHeight; } @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); //mPaint.setColor(Color.WHITE);
// 绘制一个填充色为蓝色的矩形
//canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint);
// canvas.drawCircle( getWidth()/2, getHeight()/2,radio, mPaint);
// mPaint.setColor(Color.YELLOW);
// mPaint.setTextSize(50);
// String text = String.valueOf(mCount);
// // 获取文字的宽和高
// mPaint.getTextBounds(text, 0, text.length(), mBounds);
// float textWidth = mBounds.width();
// float textHeight = mBounds.height();
//
// // 绘制字符串
// canvas.drawText(text, getWidth() / 2 - textWidth / 2, getHeight() / 2
// + textHeight / 2, mPaint); // System.out.println("px1 = "+ px1 + " py1 =" +py1);
//
// Paint paint = new Paint();
// paint.setStyle(Paint.Style.STROKE);
// paint.setColor(Color.BLACK);
// canvas.drawCircle(px1, py1, radio, paint); Paint paint2 = new Paint();
paint2.setStyle(Paint.Style.FILL);
paint2.setColor(Color.GREEN);
//px+150 py+150
canvas.drawCircle(px , py ,4, paint2);
//
Paint paint3 = new Paint();
paint3.setStyle(Paint.Style.FILL);
paint3.setColor(Color.RED);
if(isInit){
//px+150 py+150
canvas.drawCircle(px2 , py2 ,4, paint3);
isInit = false;
System.out.println(" py2 = "+py2);
return;
}
//px+150 py+150
//canvas.drawCircle( px2+200 , py2 + 300 ,10, paint3);
// canvas.drawCircle( px2+200 , py2 + 300 ,10, paint3);
canvas.drawCircle(px2 ,py2 ,4, paint3); handler.sendEmptyMessageDelayed(0, 100); isStart = true;
}

最新文章

  1. FTP传输文件
  2. 使用LIBSVM工具实现样本分类预测——MatLab
  3. go sample - mongodb
  4. poj1061 Exgcd
  5. 转:Docker学习---挂载本地目录
  6. iOS Notification 的使用
  7. NEC学习 ---- 布局 -三列, 左右定宽,中间自适应
  8. ubuntu下使用nginx部署Laravel
  9. C/C++语言void及void指针深层探索(转)
  10. 常用ping服务列表
  11. java思考题
  12. linux下面安装软件学习流程
  13. hdu 4779 Tower Defense 2013杭州现场赛
  14. 写了交互给后台后来不能用?bug多多多又找不到文件效率低?工作流程帮你优化起来~~~~
  15. Dinic算法详解及实现
  16. 是我out了,c11标准出炉鸟
  17. C++实验一
  18. Day 10733 使用独立安装包安装.Net Framework 4.6.2时,提示『无法建立到信任根颁发机构的证书链』
  19. 在全志平台调试博通的wifi驱动(类似ap6212)【转】
  20. androidpn 推送系统

热门文章

  1. Linux and Shell 实用命令
  2. java HelloWorld时报错:&quot;找不到或无法加载主类&quot;问题的解决办法
  3. 转如何检查数据库是否处于一致性的状态 以及 如果在DG 库上备份,恢复成一个主库
  4. vscode安装golang插件失败问题
  5. 05-oralce转换函数
  6. VSCode快捷键整理
  7. web测试工具总结
  8. selenium+Python(表单、多窗口切换)
  9. 使用git配合idea使用oschina代码仓库初级教程
  10. Nginx的Permission denied错误