作者rize0528 (Riz)
看板AndroidDev
标题Re: [问题] Android绘图
时间Sat Aug 20 00:48:43 2011
※ 引述《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
1F:推 fatalcord:谢谢您的回覆,让我受益良多,我会再找找相关资料的 08/20 10:30
2F:推 gn00273680:很好的解说,感谢 08/20 11:23
3F:推 drdsmile:很赞的解说 帮推一个 08/20 12:43
※ 编辑: rize0528 来自: 140.115.51.97 (08/25 14:51)