gpt4 book ai didi

android - 如何在多段线路径上为 google map v2 标记设置动画?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:55:02 26 4
gpt4 key购买 nike

我已经使用谷歌地图 V2 构建了一个应用程序,并在 map 上放置了 2 个标记。第一个标记是获取用户当前位置,第二个标记是用户目的地位置。然后我添加 decodePoly 方法在这些标记之间画线。我还添加了使用警报对话框向用户提供有关持续时间、起始地址和目标地址的信息的方法。

route

因此,当我单击第二个标记时,我想将该标记设置为“移动”到第一个标记的动画。但我的问题是,第二个标记没有在折线路径上移动。您可以在下图中看到:

result

这是 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。

最佳答案

查看说明如何为 map 路线上的标记设置动画的教程。它还在 GitHub 中提供了您可以试用的代码。

Check HERE

希望这能为您提供指导。

关于android - 如何在多段线路径上为 google map v2 标记设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20581256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com