暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Android App开发超实用实例 | 在Android手机上模拟小车在驾车线路上行驶

665

腾讯地图Android SDK是一套基于Android设备的应用程序接口,通过该接口,可以轻松访问腾讯地图服务和数据,构建功能丰富、交互性强的地图应用程序。腾讯地图Android SDK不仅包含构建地图的基本接口,还提供了诸如地图定位、地址编码、地址反编码、实时路况、POI搜索、周边搜索、公交线路搜索、驾车线路搜索等数据服务。

下面这个实例演示了在Android手机上模拟小车在驾车线路上行驶。


01

实例功能


此实例主要通过使用腾讯地图SDK的TencentSearch和TranslateAnimation,实现根据起点和终点的纬度和经度值查询两地之间的驾车线路并以动画的形式模拟小车在驾车线路上行驶。当实例运行之后,如果在“起点纬度经度值:”输入框中输入重庆红土地的纬度和经度值“29.583907,106.551332”,在“终点纬度经度值:”输入框中输入重庆弹子石的纬度和经度值“29.585997,106.593304”,然后单击“获取两地驾车线路”按钮,将使用粗红线在腾讯地图上绘制重庆红土地到重庆弹子石之间的驾车线路。单击“启动小车行驶动画”按钮,小车将沿着粗红色代表的驾车线路从起点行驶到终点,效果分别如图1(a)和图1(b)所示。


■ 图1


02

实现代码


public class MainActivity extends Activity {
 TencentMap myTencentMap;
 Polyline myPolyline;
 List<LatLng> myLatLngs; int myIndex;
 Marker myMarker;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  MapView myMapView = (MapView) findViewById(R.id.myMapView);
  myMapView.onResume();
  myTencentMap = myMapView.getMap();
  myTencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
          new LatLng(29.585997,106.593304), 13)); //设置为腾讯地图中心
 }
 public void onClickButton1(View v) { //响应单击按钮“获取两地驾车线路”
  //清空之前绘制的驾车线路和图像标记
  if(myPolyline!=null) myPolyline.remove();
  if(myMarker!=null) myMarker.remove();
  EditText myEditFrom=(EditText)findViewById(R.id.myEditFrom);
  EditText myEditTo=(EditText)findViewById(R.id.myEditTo);
  String myFromText=myEditFrom.getText().toString();
  String myToText=myEditTo.getText().toString();
  double myFromLat=Double.parseDouble(
          myFromText.substring(0,myFromText.indexOf(',')));
  double myFromLng=Double.parseDouble(
          myFromText.substring(myFromText.indexOf(',')+1));
  double myToLat=Double.parseDouble(
          myToText.substring(0,myToText.indexOf(',')));
  double myToLng=Double.parseDouble(
          myToText.substring(myToText.indexOf(',')+1));
  //设置起点为腾讯地图中心
  myTencentMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
          new LatLng(myFromLat,myFromLng),13));
  TencentSearch myTencentSearch=new TencentSearch(this);
  DrivingParam myDrivingParam=new DrivingParam();
  //设置驾车线路的起点和终点
  myDrivingParam.from(new Location((float)myFromLat,(float)myFromLng));
  myDrivingParam.to(new Location((float)myToLat,(float)myToLng));
  //通过腾讯检索服务搜索最佳驾车线路,并将该线路绘制在腾讯地图上
  myTencentSearch.getDirection(myDrivingParam,new HttpResponseListener(){
   @Override
   public void onSuccess(int i,BaseObject baseObject){
    //获取驾车线路检索结果
    DrivingResultObject myResultObject=(DrivingResultObject)baseObject;
    List<DrivingResultObject.Route> myRoutes=myResultObject.result.routes;
    //创建经纬度值列表集合,用于存储该驾车线路上的纬度经度
    myLatLngs=new ArrayList<LatLng>();
    for(Location location:myRoutes.get(0).polyline){
     myLatLngs.add(new LatLng(location.lat,location.lng));
    }
    //将驾车线路绘制在腾讯地图上
    myPolyline=myTencentMap.addPolyline(
            new PolylineOptions().addAll(myLatLngs).color(Color.RED));
    myPolyline.setWidth(18);
    myIndex=0;
    //初始化MarkerOptions对象,用于设置自定义标记的相关参数
    MarkerOptions myMarkerOptions=new MarkerOptions();
    myMarkerOptions.position(myLatLngs.get(0));
    myMarkerOptions.icon(
            BitmapDescriptorFactory.fromResource(R.mipmap.myimage1));
    //在腾讯地图的指定位置绘制图像标记(小车)
    myMarker=myTencentMap.addMarker(myMarkerOptions);
   }
   @Override
   public void onFailure(int i,String s,Throwable throwable){ }
  });
 }
 public void onClickButton2(View v) { //响应单击按钮“启动小车行驶动画”
  MyAnimation();
 }
 public void MyAnimation() {
  TranslateAnimation myAnimation=
          new TranslateAnimation(myLatLngs.get(myIndex++%myLatLngs.size()));
  myAnimation.setDuration(500);
  myAnimation.setAnimationListener(new AnimationListener(){
   @Override
   public void onAnimationStart(){}
   @Override
   public void onAnimationEnd(){
    MyAnimation(); //递归调用函数,实现小车沿指定驾车线路行驶
   }
  });
  myMarker.setAnimation(myAnimation);
  myMarker.startAnimation(); //开始执行小车行驶动画
 }
}


03

代码说明


上面这段代码在MyCode\MySampleJ90\app\src\main\java\com\bin\luo\mysample\ MainActivity.java文件中。

需要说明的是,此实例需要引入腾讯地图SDK的开发文件,即MyCode\MySampleJ90\ app\libs文件夹中的TencentMapSearch_v1.1.7.1.3e04ee1.jar文件;然后在MyCode\MySampleJ90\app文件夹的build.gradle文件中添加依赖项implementation files('libs/TencentMapSearch_v1.1.7.1.3e04ee1.jar')和implementation 'com. tencent.map:tencent-map-vector-sdk:4.1.1',并执行同步(Sync Now)操作;且需要在MyCode\MySampleJ90\app\src\main\AndroidManifest.xml文件中添加开发者Key和相关权限,具体内容请查看该文件。

此实例的完整代码在MyCode\MySampleJ90文件夹中。


04

补充说明


在测试代码时,必须保持网络畅通。


05

源代码下载

关注微信公众号,后台回复关键词 “Android App开发超实用代码224” 即可获得完整源代码。


06

参考书籍


扫码优惠购书


《Android App开发超实用代码集锦——jQuery Mobile+OpenCV+O》

ISBN:9787302589358

作者:罗帅、罗斌

定价:99元



问题描述+解决方案+真实源码+效果截图

介绍jQuery Mobile、OpenCV、OpenGL等在Android平台运行的应用

300个实例,提供完整源代码,边看边做边学



文章转载自清华计算机学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论