您的位置:首页 > 移动开发 > Android开发

安卓关于在百度地图上实现轨迹回放的处理

2013-08-07 18:10 405 查看
一、需求

  为了把一个人一段时间内的历史轨迹在地图上描绘出来,并实现按时间顺序回放。

二、唠叨

关于描点和描线,百度地图都有自己的API,大家都应该会了;至于播放动画,肯定不止一种方法,如果大家有好的方法,分享出来,小弟感激不尽。

三、说明

我的方法是:在一个线程里,开始播放后,遍历存放item的list,找到当前的item,移除他的marker,然后给他换一个marker,再添加到list里面,然后睡眠;接着就判断,如果不是当前item,该什么样子就什么样子,如此迭代就可以了。

                         小弟菜鸟一枚,代码质量不高,高手勿喷,谢谢。

主要的片段如下:

1、主要的逻辑

/** 轨迹回放逻辑处理 **/
private Runnable rz = new Runnable()
{
@Override
public synchronized void run()
{
while (isStartRun)
{
for (int i = index; i < mGeoList.size(); i++)
{
OverlayItem item = mGeoList.get(i);
flag = index;
sendMsg(MapApplication.LOCATEOVER_NOTICE_ADAPTER);
mOverlayGraphic.removeItem(item);
item.setMarker(res.get(3));
if (!isBcak)
{
break;
}
mOverlayGraphic.addItem(item);
mMapView.refresh();
SystemUtils.sleep(1000);
mOverlayGraphic.removeItem(item);
if (index == 0)
{
item.setMarker(res.get(1));
}
else if (index == mGeoList.size() - 1)
{
item.setMarker(res.get(2));
isStartRun = false;
isFinish = false;
}
else
{
View view = mInflater.inflate(R.layout.overlay_item, null);
TextView userItemTv1 = (TextView) view.findViewById(R.id.item_tv1);
userItemTv1.setText(index + 1 + "");
Bitmap bmp = userLocateUtil.createNewBitmap(view);
Drawable drawable = new BitmapDrawable(bmp);
item.setMarker(drawable);
}
if (!isBcak)
{
break;
}
mOverlayGraphic.addItem(item);
mMapView.refresh();
index++;
if (!isFinish)
{
index = 0;
sendMsg(MapApplication.LOCATEOVER_PLAY_FINISH);
break;
}
}
}
}
};
2、操作处理

/** 轨迹回放 **/
private void playTrajectory()
{

play.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (!"开始回放".equals(play.getText().toString()))
{
isStartRun = false;
isBcak = false;
play.setText("开始回放");
}
else
{
play.setText("暂停回放");
isFinish = true;
isStartRun = true;
isBcak = true;
thread = new Thread(rz);
if (!thread.isAlive())
{
thread.start();
}
}
}
});
}
3.UI处理

private Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
switch (msg.what)
{
case MapApplication.LOCATEOVER_CHANGE_MAPVIEW:
changeMapView();
break;
case MapApplication.LOCATE_MAPVIEW_REFRESH:
mMapView.refresh();
mMapView.getController().zoomToSpan(mOverlayGraphic.getLatSpanE6(), mOverlayGraphic.getLonSpanE6());
mMapView.getController().setCenter(mOverlayGraphic.getCenter());
PocProgressDialog.cancel();
break;
case MapApplication.LOCATEOVER_PLAY_FINISH:
Toast.makeText(MainActivity.mainActivity, "播放完毕", Toast.LENGTH_SHORT).show();
flag = 99999;
adapter.notifyDataSetChanged();
play.setText("开始回放");
break;
case MapApplication.LOCATEOVER_NOTICE_ADAPTER:
adapter.notifyDataSetChanged();
// mListView.setSelection(flag);备用
break;
}
}
};

最后,无图无真相啊,上图;





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐