Re: [問題] Android繪圖

看板AndroidDev作者 (Riz)時間13年前 (2011/08/20 00:48), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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)
文章代碼(AID): #1EJfFnyL (AndroidDev)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1EJfFnyL (AndroidDev)