Android百度地图的轨迹回放 | 您所在的位置:网站首页 › 百度地图轨迹视频回放怎么删除 › Android百度地图的轨迹回放 |
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 实验室设备网 版权所有 |