Android编程绘制抛物线的方法示例
更新时间:2017年06月16日 10:46:15 作者:L_serein
这篇文章主要介绍了Android编程绘制抛物线的方法,涉及Android图形绘制与数学运算相关操作技巧,需要的朋友可以参考下
本文实例讲述了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开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
相关文章
Android TextView实现点击显示全文与隐藏功能(附源码)
TextView用法很多,用到的地方更是普遍,所以学好TextView的使用很重要很重要很重要。下面这篇文章主要介绍了Android中TextView实现显示全文与隐藏功能的相关资料,文中给出了详细的示例代码和源码下载,需要的朋友可以参考下。2017-03-03
Android ListView适配器(Adapter)优化方法详解
这篇文章主要介绍了Android ListView优化方法详解的相关资料,这里举例说明该如何对ListView 进行优化,具有一定的参考价值,需要的朋友可以参考下2016-11-11
关于android studio升级4.1 某些插件使用不了的问题(Mac)
这篇文章主要介绍了关于android studio升级4.1 某些插件使用不了的问题(Mac),本文给大家分享解决方法供大家参考,感兴趣的朋友跟随小编一起看看吧2020-10-10
Android利用startActivityForResult返回数据到前一个Activity
这篇文章主要介绍了Android利用startActivityForResult返回数据到前一个Activity,帮助大家更好的利用Android进行开发,感兴趣的朋友可以了解下2021-01-01


最新评论