Re: [問題] Android繪圖
※ 引述《fatalcord (QQ)》之銘言:
: 最近在作雷達相關的程式開發
: 目前只做到從雷達收0~180度的物體距離資訊到手機
: 我的目標是在螢幕上訂定一個固定點作為座標原點
: 依據所得的距離資訊
: 在0~180度的位置各別依據其距離繪點
: 並把這些點連起來
: 有找了關於2D二維圖形的資料來看
: 但是不曉得該從何下手
: 不知道板上有沒有人做過相關程式的
: 可否提供一些意見或是網站資料作為參考
: 由衷感謝
照你敘述的內容來看,我猜想這個實作應該是要real time的吧?
那麼顯示的View就使用自訂的SurfaceView,例如:
public class RadarView extends SurfaceView implements SurfaceHolder.Callback
{
private LinkedList<PointF> mData; // 成員們
private Renderer mRenderer; // 繪圖用執行緒
private Paint mPaintPoint,
mPaintLine,
mPaintRadarText; // 繪圖用的Paint
public RadarView(Context context){...} // 建構子
[ Interface implements ] // 實作SurfaceHolder
// 以下為針對雷達資訊客製的函數
public int AddRadarPoint(PointF p){...}
// 輸入單資料點並加入到尾端,可設定固定長度,並回傳索引。
public int AddRadarPointAll(LinkedList<PointF> list){ mData = list; }
// 輸入整個資料點集合,回傳集合長度。
public LinkedList<PointF> getRadarPointList(){ return mData; }
// Get
public onDraw(Canvas c){...}
// 這邊進行繪點與繪線,用LinkedList的理由是畫完後的點就直接丟棄,這樣確保
// 都在O(1)中完成;繪圖執行緒是一直在執行的,因此可以加個判斷來防止空List
// 的全黑畫面。
public class Renderer extends Thread
{
private boolean isRunning = false;
private int nDelay = 30;
private SurfaceHolder holder = null;
private RadarView view = null;
public Renderer(RadarView view, SurfaceHolder sh){...} // 建構
public void setRunning(boolean b){ isRunning = b; }
public void setDelay(int d){ nDelay = d; }
public int getDelay(){ return nDely; }
@Override
public void Run()
{
Canvas c = null;
while(isRunning)
{
// 主迴圈
synchronized(holder)
{
try{
c = holder.lockCanvas(); // 取得canvas
view.onDraw(c); // 繪圖
}catch(Exception e){}
finally
{
holder.unlockCanvasAndPost(c); // unlock canvas
}
}
try
{
Thread.Sleep(nDelay); // 小睡片刻
}catch(...){}
}
}
}
}
這是以若我要實做這個case所會設計的基本架構,我省略了很多小細節比如normalize資
料點,設定每個pixel或單位距離所代表的資料長度等等。
繪圖的部分就使用 drawCircle, drawPath or drawLine 等等的來畫圖就好了,而這個設
計是應付有多少更新就畫多少,因此若設計成一段時間更新一次也可以加入訊息機制的方
式取代持續的執行緒回圈( e.g. Handler )來節省電力消耗。
上面的code是直接打的沒有compile過,所以使用上有問題可以上網找SurfaceView、
Thread、Handler等等的用法。
http://pastebin.com/CxtRvtxJ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.175.80
推
08/20 10:30, , 1F
08/20 10:30, 1F
推
08/20 11:23, , 2F
08/20 11:23, 2F
推
08/20 12:43, , 3F
08/20 12:43, 3F
※ 編輯: rize0528 來自: 140.115.51.97 (08/25 14:51)
討論串 (同標題文章)
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章