当前位置: 移动技术网 > IT编程>移动开发>Android > Android编程绘制抛物线的方法示例

Android编程绘制抛物线的方法示例

2019年07月24日  | 移动技术网IT编程  | 我要评论

厦门户外,真理罗恩,欺负小苍兰

本文实例讲述了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程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网