本文實例講述了Android編程繪制拋物線的方法。分享給大家供大家參考,具體如下:
公司主營業(yè)務:成都做網(wǎng)站、網(wǎng)站建設、外貿(mào)營銷網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出寧鄉(xiāng)免費做網(wǎng)站回饋大家。
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; } // 坐標轉(zhuǎn)換 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; // /// / 構造函數(shù) // / // / V0物體的初速度 // / Sita物體初速度與水平方向的夾角 // / Color顏色 public MovingObject(double V0, double Sita, int red) { this.V0 = V0; this.Sita = Sita; this.Color = red; } // /// / 物體的初速度 // / public double V0; // /// / 物體初速度與水平方向的夾角 // / public double Sita; // /// / 物體的橫坐標 // / public double X; // /// / 物體的縱坐標 // / public double Y; // 物體的顏色 public int Color; // 要繪制的物體的矩形 public Rect GetObjectRectangle() { return new Rect((int) X - 3, (int) Y - 3, 6, 6); } // /// / 最大射程 // / public double Smax; // /// / 最大高度 // / public double H; // /// / 運行時間 // / public double T; }
更多關于Android相關內(nèi)容感興趣的讀者可查看本站專題:《Android圖形與圖像處理技巧總結(jié)》、《Android開發(fā)入門與進階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設計有所幫助。