安卓关于在百度地图上实现轨迹回放的处理
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;
}
}
};
最后,无图无真相啊,上图;
为了把一个人一段时间内的历史轨迹在地图上描绘出来,并实现按时间顺序回放。
二、唠叨
关于描点和描线,百度地图都有自己的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;
}
}
};
最后,无图无真相啊,上图;
相关文章推荐
- 安卓实现在百度地图上播放历史轨迹
- javaweb实现在百度地图上的轨迹回放功能,action传入大量的参数到JSP的JavaScript中,实现绘制轨迹功能
- 安卓实现在百度地图上播放历史轨迹
- 关于在安卓开发中百度地图功能不能实现定位。
- 安卓中关于事件处理方式以Button为例实现点击事件监听
- 关于Partitioner(自定义partitioner编程实现数据自定义分区处理)
- 安卓开发中,在低版本SDK使用高版本的API会报错。一般处理方法是换一种实现方法,或者在高版本SDK中使用高版本API,低版本SDK中使用效果可能会差点的折衷方案;后者可以用如下技巧来实现。
- 百度地图历史轨迹回放:起止点为坐标点,从后台获取10个途经点
- 关于安卓Web App如何实现推送的努力(使用谷歌gcm)
- 用Java事件处理机制实现录制回放功能
- 类似滴滴打车,多辆小车在地图上平滑移动的实现,基于百度地图实现(无轨迹)
- android 百度地图轨迹回放
- 百度地图 - 轨迹回放
- 图片颜色处理/ 关于RGB转换YUV的探讨与实现
- 实现Tree控件中关于Checkbox按钮点击处理
- 实现验证码输入样式——Text分格式处理(安卓)
- Android百度地图(三):百度地图画运动轨迹及图层点击事件处理
- 基于百度地图记录运动轨迹案例分析与实现
- 安卓开发关于百度地图定位返回经纬度4.9E324参数 解决方案
- 关于在一般处理程序中实现基础验证码