时间:2021-05-20
本文实例讲述了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{ 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开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Android编程实现ImageView图片抛物线动画效果的方法。分享给大家供大家参考,具体如下:想实现抛物线动画,必须知道抛物线的方程,这时候数
word2016想要画抛物线,该怎么画抛物线呢?下面我们就来看看详细的教程。软件名称:MicrosoftOfficeProfessionalPlus2016特别
solidworks中想要绘制抛物线,该怎么绘制呢?下面我们就来看看详细的教程。软件名称:SolidWorks2019SP0-5.064位中/英文正式安装版(附
Cesium绘制抛物弧线,供大家参考,具体内容如下在网上搜了很多都没有搜到,于是自己花了点时间琢磨了一下,做个记录思路两点连线作为坐标轴,模拟抛物线,在线上取点
天猫将商品加入购物车会有一个抛物线动画,告诉用户操作成功以及购物车的位置,业务中需要用到类似的效果,记录一下实现过程备忘,先上demo一开始没有想到用抛物线函数