本文实例讲述了AndroID编程绘制抛物线的方法。分享给大家供大家参考,具体如下:
package com.yarin.androID.Examples_05_04;import java.util.HashSet;import java.util.Iterator;import java.util.linkedList;import java.util.List;import java.util.Set;import androID.content.Context;import androID.graphics.Canvas;import androID.graphics.color;import androID.graphics.Paint;import androID.graphics.Rect;import androID.util.Log;import androID.vIEw.KeyEvent;import androID.vIEw.MotionEvent;import androID.vIEw.VIEw;import androID.Widget.Toast;public class GameVIEw extends VIEw implements Runnable{ /* 声明Paint对象 */ private Paint mPaint = null; double maxS = 0; double maxH = 0; double maxT = 0; double dx; double dy; double d; MovingObject obj; boolean isDraw=false; public GameVIEw(Context context) { super(context); /* 构建对象 */ mPaint = new Paint(); // 计算物体的最大高度、运动时间及最大射程 obj = new MovingObject(30,Math.PI / 4,color.RED); // 运行时间 obj.T = 2 * obj.V0 * Math.sin(obj.Sita) / 9.8; // 最大高度 obj.H = obj.V0 * obj.V0 * Math.sin(obj.Sita) * Math.sin(obj.Sita) / (2 * 9.8); // 最大射程 obj.Smax = 2 * obj.V0 * obj.V0 * Math.sin(obj.Sita) * Math.cos(obj.Sita) / 9.8; if (obj.Smax > maxS) { maxS = obj.Smax; } if (obj.H > maxH) { maxH = obj.H; } if (obj.T > maxT) { maxT = obj.T; } dx = (800 - 20) / maxS; dy = (480 - 20) / maxH; d = Math.min(dx,dy); //最大运行时间 Log.v("TAG",String.valueOf(maxT)); //最大高度 Log.v("TAG",String.valueOf(maxH)); //最大射程 Log.v("TAG",String.valueOf(maxS)); } public voID onDraw(Canvas canvas) { super.onDraw(canvas); /* 设置画布的颜色 */ canvas.drawcolor(color.BLACK); /* 设置取消锯齿效果 */ mPaint.setAntiAlias(true); canvas.drawcolor(color.GREEN); if(isDraw) { canvas.drawCircle((float)obj.X,(float)obj.Y,10,mPaint); } } // 触笔事件 public boolean ontouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: new Thread(this).start(); break; } return true; } public voID run() { for (double t = 0; t < maxT; t += 0.01) { Log.v("TAG",String.valueOf(t)); isDraw=true; // 水平坐标 double x = obj.V0 * Math.cos(obj.Sita) * t; // 竖直坐标 double y = obj.V0 * Math.sin(obj.Sita) * t - 9.8 * t * t / 2; if (y < 0) { continue; } // 坐标转换 obj.X = 10 + d * x; obj.Y = 480 - 10 - d * y; try { Thread.sleep(10); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } // 使用postInvalIDate可以直接在线程中更新界面 postInvalIDate(); } }}class MovingObject{ // 重力加速度 public final double G = 9.8; // / <summary> // / 构造函数 // / </summary> // / V0物体的初速度 // / Sita物体初速度与水平方向的夹角 // / color颜色 public MovingObject(double V0,double Sita,int red) { this.V0 = V0; this.Sita = Sita; this.color = red; } // / <summary> // / 物体的初速度 // / </summary> public double V0; // / <summary> // / 物体初速度与水平方向的夹角 // / </summary> public double Sita; // / <summary> // / 物体的横坐标 // / </summary> public double X; // / <summary> // / 物体的纵坐标 // / </summary> public double Y; // 物体的颜色 public int color; // 要绘制的物体的矩形 public Rect GetobjectRectangle() { return new Rect((int) X - 3,(int) Y - 3,6,6); } // / <summary> // / 最大射程 // / </summary> public double Smax; // / <summary> // / 最大高度 // / </summary> public double H; // / <summary> // / 运行时间 // / </summary> public double T;}
更多关于AndroID相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《@L_502_2@》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家AndroID程序设计有所帮助。
总结以上是内存溢出为你收集整理的Android编程绘制抛物线的方法示例全部内容,希望文章能够帮你解决Android编程绘制抛物线的方法示例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)