全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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  # 绘制  # 抛物线  # Android自定义View实现绘制虚线的方法详解  # Android Path绘制贝塞尔曲线实现QQ拖拽泡泡  # Android 游戏开发中绘制游戏触摸轨迹的曲线图  # Android中贝塞尔曲线的绘制方法示例代码  # Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能实例  # Android编程之canvas绘制各种图形(点  # 直线  #   #   # 椭圆  # 文字  # 矩形  # 多边形  # 曲线  # 圆角矩形)  # android绘制几何图形的实例代码  # Android学习教程之2D绘图基础及绘制太极图  # Android自定义View实现shape图形绘制  # Android开发实现绘制淘宝收益图折线效果示例  # 进阶  # 重力加速度  # 相关内容  # 感兴趣  # 给大家  # 可以直接  # 更多关于  # 解决方法  # 所述  # 图像处理  # 程序设计  # 讲述了  # Runnable  # implements  # extends  # null  # mPaint  # private  # GameView  # View 


相关文章: 如何有效防御Web建站篡改攻击?  南京网站制作费用,南京远驱官方网站?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  公司网站制作价格怎么算,公司办个官网需要多少钱?  SQL查询语句优化的实用方法总结  临沂网站制作公司有哪些,临沂第四中学官网?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  建站之星如何快速生成多端适配网站?  网站制作免费,什么网站能看正片电影?  学校为何禁止电信移动建设网站?  如何选择高效稳定的ISP建站解决方案?  已有域名和空间如何快速搭建网站?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  东莞专业制作网站的公司,东莞大学生网的网址是什么?  招贴海报怎么做,什么是海报招贴?  模具网站制作流程,如何找模具客户?  如何做静态网页,sublimetext3.0制作静态网页?  高端建站如何打造兼具美学与转化的品牌官网?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  如何选择CMS系统实现快速建站与SEO优化?  建站主机选购指南:核心配置与性价比推荐解析  平台云上自助建站如何快速打造专业网站?  Android自定义控件实现温度旋转按钮效果  定制建站方案优化指南:企业官网开发与建站费用解析  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  常州自助建站费用包含哪些项目?  如何自定义建站之星网站的导航菜单样式?  简历在线制作网站免费版,如何创建个人简历?  想学网站制作怎么学,建立一个网站要花费多少?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  制作农业网站的软件,比较好的农业网站推荐一下?  实例解析angularjs的filter过滤器  如何在服务器上三步完成建站并提升流量?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  如何基于云服务器快速搭建网站及云盘系统?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  建站之星后台管理:高效配置与模板优化提升用户体验  山东云建站价格为何差异显著?  建站之星如何防范黑客攻击与数据泄露?  如何在香港服务器上快速搭建免备案网站?  小型网站制作HTML,*游戏网站怎么搭建?  建站上市公司网站建设方案与SEO优化服务定制指南  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。