国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程繪制拋物線的方法示例

2019-12-12 02:39:56
字體:
來源:轉載
供稿:網友

本文實例講述了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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九龙县| 永德县| 昌都县| 安阳市| 宿松县| 蒲城县| 军事| 江阴市| 阳城县| 南通市| 百色市| 岑溪市| 元谋县| 满洲里市| 丽水市| 西城区| 朝阳区| 临邑县| 富宁县| 巴彦淖尔市| 黄石市| 板桥市| 孝义市| 红原县| 集贤县| 新邵县| 丰顺县| 达日县| 合水县| 榆社县| 天津市| 丰都县| 都安| 青岛市| 普安县| 枣强县| 波密县| 莎车县| 临武县| 崇左市| 安图县|