Android編程繪制拋物線的方法示例
本文實(shí)例講述了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對(duì)象 */ 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); /* 構(gòu)建對(duì)象 */ mPaint = new Paint(); // 計(jì)算物體的最大高度、運(yùn)動(dòng)時(shí)間及最大射程 obj = new MovingObject(30, Math.PI / 4, Color.RED); // 運(yùn)行時(shí)間 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); //最大運(yùn)行時(shí)間 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); /* 設(shè)置畫布的顏色 */ canvas.drawColor(Color.BLACK); /* 設(shè)置取消鋸齒效果 */ 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; // 水平坐標(biāo) double x = obj.V0 * Math.cos(obj.Sita) * t; // 豎直坐標(biāo) double y = obj.V0 * Math.sin(obj.Sita) * t - 9.8 * t * t / 2; if (y < 0) { continue; } // 坐標(biāo)轉(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; // / <summary> // / 構(gòu)造函數(shù) // / </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> // / 物體的橫坐標(biāo) // / </summary> public double X; // / <summary> // / 物體的縱坐標(biāo) // / </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> // / 運(yùn)行時(shí)間 // / </summary> public double T; }
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android圖形與圖像處理技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見(jiàn)問(wèn)題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android自定義View實(shí)現(xiàn)繪制虛線的方法詳解
- Android Path繪制貝塞爾曲線實(shí)現(xiàn)QQ拖拽泡泡
- Android 游戲開發(fā)中繪制游戲觸摸軌跡的曲線圖
- Android中貝塞爾曲線的繪制方法示例代碼
- Android開發(fā)之多線程中實(shí)現(xiàn)利用自定義控件繪制小球并完成小球自動(dòng)下落功能實(shí)例
- Android編程之canvas繪制各種圖形(點(diǎn),直線,弧,圓,橢圓,文字,矩形,多邊形,曲線,圓角矩形)
- android繪制幾何圖形的實(shí)例代碼
- Android學(xué)習(xí)教程之2D繪圖基礎(chǔ)及繪制太極圖
- Android自定義View實(shí)現(xiàn)shape圖形繪制
- Android開發(fā)實(shí)現(xiàn)繪制淘寶收益圖折線效果示例
相關(guān)文章
Android自定義View實(shí)現(xiàn)繪制虛線的方法詳解
這篇文章主要給大家介紹了Android自定義View實(shí)現(xiàn)繪制虛線的方法,在繪制過(guò)程中走了一些彎路才實(shí)現(xiàn)了虛線的效果,所以想著總結(jié)分享出來(lái),方便有需要的朋友和自己在需要的時(shí)候參考學(xué)習(xí),下面來(lái)一起看看吧。2017-04-04基于SceneForm實(shí)現(xiàn)子彈射擊(繪制子彈運(yùn)行軌跡)
這篇文章主要為大家詳細(xì)介紹了基于SceneForm實(shí)現(xiàn)子彈射擊,繪制子彈運(yùn)行軌跡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11Android中使用Service實(shí)現(xiàn)后臺(tái)發(fā)送郵件功能實(shí)例
這篇文章主要介紹了Android中使用Service實(shí)現(xiàn)后臺(tái)發(fā)送郵件功能的方法,結(jié)合實(shí)例形式分析了Service實(shí)現(xiàn)郵件的發(fā)送、接收及權(quán)限控制相關(guān)技巧,需要的朋友可以參考下2016-01-01Flutter開發(fā)技巧ListView去除水波紋方法示例
這篇文章主要為大家介紹了Flutter開發(fā)技巧ListView去除水波紋方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Android 藍(lán)牙自動(dòng)匹配PIN碼跳過(guò)用戶交互示例
本篇文章主要介紹了Android 藍(lán)牙自動(dòng)匹配PIN碼跳過(guò)用戶交互示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Android使用ViewFlipper實(shí)現(xiàn)圖片上下自動(dòng)輪播的示例代碼
這篇文章主要介紹了Android使用ViewFlipper實(shí)現(xiàn)圖片上下自動(dòng)輪播的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05使用IntelliJ IDEA 配置安卓(Android)開發(fā)環(huán)境的教程詳解(新手必看)
這篇文章主要介紹了使用IntelliJ IDEA 配置安卓(Android)開發(fā)環(huán)境的教程詳解(新手必看),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Android App中ListView仿QQ實(shí)現(xiàn)滑動(dòng)刪除效果的要點(diǎn)解析
這篇文章主要介紹了Android App中ListView仿QQ實(shí)現(xiàn)滑動(dòng)刪除效果的要點(diǎn)解析,重點(diǎn)是要判斷手勢(shì)按下的位置坐標(biāo),需要的朋友可以參考下2016-04-04