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实现点击显示全文与隐藏功能(附源码)

    Android TextView实现点击显示全文与隐藏功能(附源码)

    TextView用法很多,用到的地方更是普遍,所以学好TextView的使用很重要很重要很重要。下面这篇文章主要介绍了Android中TextView实现显示全文与隐藏功能的相关资料,文中给出了详细的示例代码和源码下载,需要的朋友可以参考下。
    2017-03-03
  • Android识别NFC芯片制造商的方法

    Android识别NFC芯片制造商的方法

    这篇文章介绍了Android识别NFC芯片制造商的方法,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • Android开发之Notification通知用法详解

    Android开发之Notification通知用法详解

    这篇文章主要介绍了Android开发之Notification通知用法,结合实例形式较为详细的分析了Notification通知的功能、参数、定义及使用方法,需要的朋友可以参考下
    2016-11-11
  • 手把手教你实现Android编译期注解

    手把手教你实现Android编译期注解

    今天给大家介绍Android编译期注解sdk的步骤以及注意事项,并简要分析了运行时注解以及字节码技术在生成代码上与编译期注解的不同与优劣,感兴趣的朋友一起看看吧
    2021-07-07
  • Android ListView适配器(Adapter)优化方法详解

    Android ListView适配器(Adapter)优化方法详解

    这篇文章主要介绍了Android ListView优化方法详解的相关资料,这里举例说明该如何对ListView 进行优化,具有一定的参考价值,需要的朋友可以参考下
    2016-11-11
  • 关于android studio升级4.1 某些插件使用不了的问题(Mac)

    关于android studio升级4.1 某些插件使用不了的问题(Mac)

    这篇文章主要介绍了关于android studio升级4.1 某些插件使用不了的问题(Mac),本文给大家分享解决方法供大家参考,感兴趣的朋友跟随小编一起看看吧
    2020-10-10
  • Kotlin浅析null操作方法

    Kotlin浅析null操作方法

    Kotlin对比于Java的一个最大的区别就是它致力于消除空引用所带来的危险。在Java中,如果我们尝试访问一个空引用的成员可能就会导致空指针异常NullPointerException(NPE)的出现。在Kotlin语言中就解决了这个问题,下面来看看它是如何做到的
    2022-08-08
  • Android利用startActivityForResult返回数据到前一个Activity

    Android利用startActivityForResult返回数据到前一个Activity

    这篇文章主要介绍了Android利用startActivityForResult返回数据到前一个Activity,帮助大家更好的利用Android进行开发,感兴趣的朋友可以了解下
    2021-01-01
  • Android实现简易版打地鼠

    Android实现简易版打地鼠

    这篇文章主要为大家详细介绍了Android实现简易版打地鼠,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • android获取ibeacon列表的方法

    android获取ibeacon列表的方法

    这篇文章主要为大家详细介绍了android获取ibeacon列表的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10

最新评论