Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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(...){}
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment