作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经使用谷歌地图 V2 构建了一个应用程序,并在 map 上放置了 2 个标记。第一个标记是获取用户当前位置,第二个标记是用户目的地位置。然后我添加 decodePoly 方法在这些标记之间画线。我还添加了使用警报对话框向用户提供有关持续时间、起始地址和目标地址的信息的方法。
因此,当我单击第二个标记时,我想将该标记设置为“移动”到第一个标记的动画。但我的问题是,第二个标记没有在折线路径上移动。您可以在下图中看到:
这是 MapActivity.java:
@Override
public boolean onMarkerClick(Marker arg0) { // if user click the first marker
if(this.lokasi_asli.equals(arg0)){
AlertDialog.Builder alert = new AlertDialog.Builder(MapActivity.this);
alert.setTitle("First Position")
.setIcon(R.drawable.ic_launcher)
.setCancelable(true)
.setMessage("First Position : " + "\n" + loc_a)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alert.show();
} else if (this.lokasi_tujuan.equals(arg0)) { //if user click second marker
final boolean hideMarker = false;
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
Projection proj = gmap.getProjection();
Point startPoint = proj.toScreenLocation(lokasi_tujuan.getPosition());
final LatLng startLatLng = proj.fromScreenLocation(startPoint);
final long duration = 5000;
final Interpolator interpolator = new LinearInterpolator();
handler.post(new Runnable() {
@Override
public void run() {
long elapsed = SystemClock.uptimeMillis() - start;
float t = interpolator.getInterpolation((float) elapsed / duration);
double longid = t * lokasi_asli.getPosition().longitude + (1-t) * startLatLng.longitude;
double latid = t * lokasi_asli.getPosition().latitude + (1-t) * startLatLng.latitude;
lokasi_tujuan.setPosition(new LatLng(latid, longid));
if(t < 1.0){
//
handler.postDelayed(this, 16);
} else {
if(hideMarker){
lokasi_tujuan.setVisible(false);
} else {
lokasi_tujuan.setVisible(true);
}
}
}
});
从谷歌地图获取数据:
@Override
protected void onPostExecute(Void result){
super.onPostExecute(result);
if(doc != null){
NodeList _nodelist = doc.getElementsByTagName("status");
Node node1 = _nodelist.item(0);
String _status1 = node1.getChildNodes().item(0).getNodeValue();
if(_status1.equalsIgnoreCase("OK"))
{
NodeList _nodelist_path = doc.getElementsByTagName("overview_polyline");
Node node_path = _nodelist_path.item(0);
Element _status_path = (Element)node_path;
NodeList _nodelist_destination_path = _status_path.getElementsByTagName("points");
Node _nodelist_dest = _nodelist_destination_path.item(0);
String _path = _nodelist_dest.getChildNodes().item(0).getNodeValue();
List<LatLng> directionPoint = decodePoly(_path);
PolylineOptions rectLine = new PolylineOptions().width(10).color(Color.RED).geodesic(true);
for (int i = 0; i < directionPoint.size(); i++)
{
rectLine.add(directionPoint.get(i));
}
gmap.addPolyline(rectLine);
mark_opt.position(new LatLng(dest_lat, dest_long));
mark_opt.draggable(true);
mark_opt.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
lokasi_tujuan = gmap.addMarker(mark_opt);
} else {
Toast.makeText(MapActivity.this, "Maaf, Tidak dapat menemukan rute tujuan\nCoba pilih rute lain yang mendekati", Toast.LENGTH_LONG).show();
}
progres_dlg.dismiss();
}
}
}
如何让第二个标记在折线路径上移动??任何想法或帮助将不胜感激。环境:Windows 7、Eclipse、Genymotion。
最佳答案
关于android - 如何在多段线路径上为 google map v2 标记设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20581256/
我是一名优秀的程序员,十分优秀!