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)試技巧與常見問(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 TextView實(shí)現(xiàn)點(diǎn)擊顯示全文與隱藏功能(附源碼)
TextView用法很多,用到的地方更是普遍,所以學(xué)好TextView的使用很重要很重要很重要。下面這篇文章主要介紹了Android中TextView實(shí)現(xiàn)顯示全文與隱藏功能的相關(guān)資料,文中給出了詳細(xì)的示例代碼和源碼下載,需要的朋友可以參考下。2017-03-03
Android開發(fā)之Notification通知用法詳解
這篇文章主要介紹了Android開發(fā)之Notification通知用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Notification通知的功能、參數(shù)、定義及使用方法,需要的朋友可以參考下2016-11-11
手把手教你實(shí)現(xiàn)Android編譯期注解
今天給大家介紹Android編譯期注解sdk的步驟以及注意事項(xiàng),并簡(jiǎn)要分析了運(yùn)行時(shí)注解以及字節(jié)碼技術(shù)在生成代碼上與編譯期注解的不同與優(yōu)劣,感興趣的朋友一起看看吧2021-07-07
Android ListView適配器(Adapter)優(yōu)化方法詳解
這篇文章主要介紹了Android ListView優(yōu)化方法詳解的相關(guān)資料,這里舉例說(shuō)明該如何對(duì)ListView 進(jìn)行優(yōu)化,具有一定的參考價(jià)值,需要的朋友可以參考下2016-11-11
關(guān)于android studio升級(jí)4.1 某些插件使用不了的問(wèn)題(Mac)
這篇文章主要介紹了關(guān)于android studio升級(jí)4.1 某些插件使用不了的問(wèn)題(Mac),本文給大家分享解決方法供大家參考,感興趣的朋友跟隨小編一起看看吧2020-10-10
Android利用startActivityForResult返回?cái)?shù)據(jù)到前一個(gè)Activity
這篇文章主要介紹了Android利用startActivityForResult返回?cái)?shù)據(jù)到前一個(gè)Activity,幫助大家更好的利用Android進(jìn)行開發(fā),感興趣的朋友可以了解下2021-01-01
Android實(shí)現(xiàn)簡(jiǎn)易版打地鼠
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)易版打地鼠,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05

