Android百度地图的轨迹回放 您所在的位置:网站首页 百度地图轨迹视频回放怎么删除 Android百度地图的轨迹回放

Android百度地图的轨迹回放

2024-03-03 23:10| 来源: 网络整理| 查看: 265

 Android百度地图轨迹播放暂停速度调控,进度调控

摘要:之前看到了百度地图的api以为Android的实现方式也是很简单的,结果百度地图的demo并没有Android的轨迹播放的demo,有的也是简单的轨迹播放并没有进度和速度的控制,最后只能是自己做的。

   可以是实现小汽车轨迹的平滑移动,并且并且弹框的内容可以跟着小汽车的变化而变化。汽车轨迹播放的暂停与播放,进度的控制,速度的控制,并且如果车辆是移动到外面的还可以自动移动到屏幕中间

一:结果展示(因为gif的大小只能是5M所以录制的比较少 )

二:代码展示 activity的代码展示 这里请求的是本地的json格式的数据,但是里面也注释了HTTP的请求方式有需要的可以参考。

package com.boxin.truck.activity.manager; import android.annotation.SuppressLint; import android.content.Intent; import android.graphics.Point; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.TextView; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.InfoWindow; import com.baidu.mapapi.map.MapStatus; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.Marker; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.map.OverlayOptions; import com.baidu.mapapi.map.Polyline; import com.baidu.mapapi.map.PolylineOptions; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.model.LatLngBounds; import com.boxin.truck.R; import com.boxin.truck.map.MapActivity; import com.boxin.truck.model.BaiduTrack; import com.boxin.truck.util.JsonUtils; import com.boxin.truck.util.LogUtils; import com.boxin.truck.util.TimeUtils; import com.boxin.truck.util.ToastUtils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; /**  * Created by lsx on 2020/03/17.  * 轨迹播放  */ public class BaiduTrackActivity extends MapActivity implements View.OnClickListener {     @BindView(R.id.title_tv)     public TextView mTitleTV;     @BindView(R.id.back_container)     public RelativeLayout mBackContainer;     @BindView(R.id.linearLayout)     public LinearLayout linearLayout;     @BindView(R.id.bmapView)     protected MapView bmapView;     @BindView(R.id.map)     protected com.google.android.gms.maps.MapView googleView;     @BindView(R.id.data_container)     public LinearLayout mDataContainer;     @BindView(R.id.top_truck_container)     public RelativeLayout mTopTruckContainer;     @BindView(R.id.top_truck_tv)     public TextView mTopTruckTV;     @BindView(R.id.loading_container)     public RelativeLayout loadingContainer;     @BindView(R.id.txt_bmap_top_name)     public TextView txtName;     @BindView(R.id.txt_bmap_top_speed)     public TextView txtSpeed;     @BindView(R.id.txt_bmap_top_time)     public TextView txtTime;     @BindView(R.id.play_btn)     public ImageView mPlayBtn;     @BindView(R.id.progress_bar)     public SeekBar mProgressBar;     @BindView(R.id.speed_bar)     public SeekBar mSpeedBar;     private static final String TAG = "GoogleTraceActivity";     public static final String BUNDLE_PLATENUMBER = "mPlateNumber";     public static final String BUNDLE_DATA_MILEAGE_DAILY = "mileageDaily";     protected BaiduMap mMap;     private BitmapDescriptor startBmp, endBmp, currentBmp;     private BitmapDescriptor mGreenTexture = BitmapDescriptorFactory.fromAsset("Icon_road_green_arrow.png");     private Polyline mPolyline;     private Marker mMoveMarker;     private Handler mHandler;     private List polyLineList;     public ArrayList routePoints = new ArrayList();     volatile boolean isMoving = true; //是否开始运动     volatile boolean AnimationEnd = false; //动画是否播放结束     private LatLng mLastLatLng = null; //保存移动到具体的某个点     private double slope; //调整的坡     private boolean isYReverse; //调整后的Y轴     private boolean isXReverse;//调整后的X轴     private double intercept;// 根据点和斜率算取截距     private double xMoveDistance; //X轴移动的距离     private double yMoveDistance; //Y轴移动的距离     private LatLng lastStartPoint;//保存上一个起点     private LinearLayout mInfoWindowLayout;//提示框     private TextView mSpeed,mSpeedTV, mTimeTv; //文字信息     private boolean isFirstStartThread = true;     // 通过设置间隔时间和距离可以控制速度和图标移动的距离     private int mNotChangeTime = 100;//默认1000毫秒     volatile int mSleepTime = 100;     volatile double mDistance = 0.00002;     boolean state = true;//点击播放为true,点击暂停为false     private LayoutInflater factory;//引入新的弹框样式     private View layout;//初始化弹框样式     @SuppressLint("baiDuHandler")     private Handler myHandler = new Handler() {         public void handleMessage(Message msg) {             Bundle bundle = msg.getData();             //类型为1的是实时监控marker的数据改变,类型为2是车辆运动到最后弹出警示和设置暂停按钮             if (bundle.getString("type").equals("1")) {                 mSpeedTV.setText(bundle.getString("speed"));                 mTimeTv.setText(bundle.getString("time"));                 mMoveMarker.getInfoWindow().setBitmapDescriptor(BitmapDescriptorFactory.fromView(layout));             } else if (bundle.getString("type").equals("2")) {                 showLimitTips();                 mPlayBtn.setBackground(getResources().getDrawable(R.drawable.map_icon_stop));             }             super.handleMessage(msg);         }     };     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_map_track);         ButterKnife.bind(this);         ButterKnife.bind(this);         getPermission();         initView();         loadData();     }     /**      * 方法必须重写      */     @Override     protected void onSaveInstanceState(Bundle outState) {         super.onSaveInstanceState(outState);         bmapView.onSaveInstanceState(outState);     }     public void initView() {         //mileageDailySubclass= (MileageDailySubclass) getIntent().getExtras().getSerializable(BUNDLE_DATA_MILEAGE_DAILY);         // mTitleTV.setText(mileageDailySubclass.getPlateNumber());         mTitleTV.setText("轨迹回放");         mBackContainer.setVisibility(View.VISIBLE);         polyLineList = new ArrayList();         mTopTruckContainer.setVisibility(View.VISIBLE);         googleView.setVisibility(View.GONE);         bmapView.setVisibility(View.VISIBLE);         mDataContainer.setVisibility(View.VISIBLE);         loadingContainer.setVisibility(View.VISIBLE);         mMap = bmapView.getMap();         mMap.getUiSettings().setRotateGesturesEnabled(false);//不允许旋转地图         mMap.getUiSettings().setZoomGesturesEnabled(true);         mMap.getUiSettings().setCompassEnabled(true);         mMap.setTrafficEnabled(false);         mMap.setBuildingsEnabled(false);         mMap.setIndoorEnable(false);         mMap.getUiSettings().setAllGesturesEnabled(true);         startBmp = BitmapDescriptorFactory.fromResource(R.drawable.icon_map_start_point);         endBmp = BitmapDescriptorFactory.fromResource(R.drawable.destination);         currentBmp = BitmapDescriptorFactory.fromResource(R.drawable.ic_truck);         //初始化弹框样式         factory=  LayoutInflater.from(BaiduTrackActivity.this) ;         layout=factory.inflate(R.layout.map_bullet_box, null);         mSpeedTV = (TextView) layout.findViewById(R.id.speed_tv);         mTimeTv = (TextView) layout.findViewById(R.id.time_tv);         //顶部样式隐藏与显示         mTopTruckContainer.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View v) {                 if (mDataContainer.getVisibility() == View.GONE) {                     mDataContainer.setVisibility(View.VISIBLE);                     mTopTruckTV.setText("隐藏");                 } else {                     mDataContainer.setVisibility(View.GONE);                     mTopTruckTV.setText("显示");                 }             }         });         //进度监听         mProgressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {             @Override             public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {                 //Log.e("size",progress+"--");                 if (routePoints == null || routePoints.size() == 0) {                     return;                 }                 if (progress == routePoints.size() - 1) {                     //设置按钮                     mPlayBtn.setBackgroundResource(R.drawable.map_icon_stop);                     isMoving = false;                     //设置终点marker                     if (mMoveMarker != null) {                         mMoveMarker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_truck));                     }                 }                 if (progress < routePoints.size() - 1)                     ai.set(progress);             }             @Override             public void onStartTrackingTouch(SeekBar seekBar) {                 LogUtils.i(TAG, "点击了进度条");                 isMoving = false;             }             @Override             public void onStopTrackingTouch(SeekBar seekBar) {                 LogUtils.i(TAG, "停止点击进度条");                 if (!state)                     isMoving = true;             }         });         //速度监听         mSpeedBar.setMax(mNotChangeTime);         mSpeedBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {             @Override             public void onProgressChanged(SeekBar seekBar, int i, boolean b) {                 if (routePoints == null || routePoints.size() == 0) {                     return;                 }                 if (mSleepTime > 0) {                     mSleepTime = mNotChangeTime - i;                     mDistance = i * 0.000005 + 0.00002;                 }             }             @Override             public void onStartTrackingTouch(SeekBar seekBar) {                 LogUtils.i(TAG, "点击了速度进度条");                 isMoving = false;             }             @Override             public void onStopTrackingTouch(SeekBar seekBar) {                 LogUtils.i(TAG, "停止点击速度进度条");                 if (!state)                     isMoving = true;             }         });         mHandler = new Handler(Looper.getMainLooper());     }         public void loadData() {         /* HashMap params = new HashMap();        params.put("boxId", mileageDailySubclass.getBoxId());         params.put("beginDate",TimeUtils.f_long_2_str(mileageDailySubclass.getStartTime().getTime()));         params.put("endDate",TimeUtils.f_long_2_str(mileageDailySubclass.getEndTime().getTime()));         params.put("mapType","1");         LogUtils.i(TAG, "queryTrajectoryUrl=" + UrlConfig.getTrajectory() + " ,params=" + params);           HttpProxy.getInstance().post(this, UrlConfig.getTrajectory(), params, new ICallback() {             @Override             public void onFailure(String e) {                 LogUtils.i(TAG,"MileageDailyDetail-err"+e);             }             @Override             public void onResponse(String result) {                 LogUtils.i(TAG, "MileageDailyDetail-result=" + result);                 ArrayList tracks = (ArrayList) JsonUtils.MultipleJson(result, BaiduTrack.class);                 for(int j=0;j


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有