第三篇文章准备单独拿出来写,因为在大疆为人机的所有功能中,航线规划的功能最为复杂,也相当的繁琐,这里需要说仔细一点,可能会将代码进行多步分解。
1航线规划
航线打点
在地图中手动选择点位选择完成航线打点;若打点位置错了可进行点位删除。
航点设置
可对航线点位进行设置,如飞行高度,速度(慢速:3m/s;中速: 7m/s;高速:10 m/s)、任务结束后操作及航向,点击[设置]按钮完成设置。
设置完成后会显示总距离及飞行总时间。
航线上传
点击[上传]按钮,进行航线上传。可以进入本地存储中选择航线文件进行上传,航线文件为 .kml结尾。
航线执行
点击 [开始]按钮,则可对航线进行执行。若中途需要暂停也可点击[暂停]安装进行暂停操作。
航线管理
按钮即可进入航线管理界面。
获取航线
点击[获取]按钮,即可将航线信息展示到地图界面中。
2主要功能代码
创建activity_setting_route.xml及SettingRouteActivity文件。
activity_setting_route.xml
SettingRouteActivity
publicclassSettingRouteActivityextendsBaseActivityimplementsAMap.OnMarkerClickListener,View.OnClickListener,AMap.OnMapClickListener,LocationSource,AMapLocationListener,AMap.InfoWindowAdapter{ @BindView(R.id.layout_route) ViewmViewLayoutToolbar; @BindView(R.id.ll_route) LinearLayoutmLinearLayout; @BindView(R.id.tv_toolbar_title) TextViewmTextViewToolbarTitle; //@BindView(R.id.map) //MapViewmMapView; @BindView(R.id.btn_delete) ButtonmButtonDelete; @BindView(R.id.btn_finish) ButtonmButtonFinish; @BindView(R.id.btn_setting) ButtonmButtonSetting; @BindView(R.id.btn_upload) ButtonmButtonUpload; @BindView(R.id.btn_start) ButtonmButtonStart; @BindView(R.id.btn_stop) ButtonmButtonStop; @BindView(R.id.ll_information) LinearLayoutmLinearLayoutInformation; @BindView(R.id.tv_height) TextViewmTextViewHeight; @BindView(R.id.tv_speed) TextViewmTextViewSpeed; @BindView(R.id.tv_count) TextViewmTextViewCount; @BindView(R.id.tv_distance) TextViewmTextViewDistance; @BindView(R.id.tv_time) TextViewmTextViewTime; privateMapViewmMapView; privateOnLocationChangedListenermListener; privateAMapLocationClientmlocationClient; privateAMapLocationClientOptionmLocationOption; privatedoubleD_latitude,D_longitude; privateUiSettingsmUiSettings; privateAMapaMap; privateMarkerdroneMarker=null; privatefloataltitude=100.0f; privatefloatmSpeed=10.0f; privatebooleanisAdd=false; privatefinalMapmMarkers=newConcurrentHashMap (); privateMarkermClickMarker; privateList waypointList=newArrayList<>(); privateList mLatLng=newArrayList<>(); privateList mPointInfo=newArrayList<>(); publicstaticWaypointMission.BuilderwaypointMissionBuilder; privateFlightControllermFlightController; privateWaypointMissionOperatorinstance; privateWaypointMissionFinishedActionmFinishedAction=WaypointMissionFinishedAction.NO_ACTION; privateWaypointMissionHeadingModemHeadingMode=WaypointMissionHeadingMode.AUTO; privateSQLiteHelpermSQLiteHelper; privateStringFinishedAction,HeadingMode; //自定义窗体 ViewinfoWindow=null; intspeed_RG_id=0; intactionAfterFinished_RG_id=0; intheading_RG_id=0; //kim staticReadKmlreadKml=newReadKml(); privatestaticList sampleList=readKml.getCoordinateList(); @Override publicvoidinitViews(){ mLinearLayout.setVisibility(View.VISIBLE); mTextViewToolbarTitle.setText("航线规划"); IntentFilterfilter=newIntentFilter(); filter.addAction(ReceiverApplication.FLAG_CONNECTION_CHANGE); registerReceiver(mReceiver,filter); mMapView=findViewById(R.id.map); mMapView.onCreate(InstanceState); initMapView(); addListener(); onProductConnectionChange(); } @Override protectedvoidonResume(){ super.onResume(); initFlightController(); mMapView.onResume(); } /** *方法必须重写 */ @Override protectedvoidonSaveInstanceState(BundleoutState){ super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } @Override protectedvoidonPause(){ super.onPause(); mMapView.onPause(); deactivate(); } @Override protectedvoidonDestroy(){ super.onDestroy(); unregisterReceiver(mReceiver); removeListener(); mMapView.onDestroy(); if(null!=mlocationClient){ mlocationClient.onDestroy(); } } @Override publicvoidinitDatas(){ } @Override protectedvoidrequestData(){ } privatevoidinitMapView(){ if(aMap==null){ aMap=mMapView.getMap(); mUiSettings=aMap.getUiSettings(); mUiSettings.setMyLocationButtonEnabled(true); mUiSettings.setScaleControlsEnabled(true); aMap.setOnMapClickListener(this);//addthelistenerforclickforamapobject aMap.setLocationSource(this); aMap.setMyLocationEnabled(true); aMap.setInfoWindowAdapter(this); aMap.setOnMarkerClickListener(this); setupLocationStyle(); } } privatevoidsetupLocationStyle(){ //自定义系统定位蓝点 MyLocationStylemyLocationStyle=newMyLocationStyle(); //自定义定位蓝点图标 myLocationStyle.myLocationIcon(BitmapDescriptorFactory. fromResource(R.mipmap.icv_gps_point_36dp)); //自定义精度范围的圆形边框颜色 myLocationStyle.strokeColor(Color.parseColor("#00000000")); //自定义精度范围的圆形边框宽度 myLocationStyle.strokeWidth(5); //设置圆形的填充颜色 myLocationStyle.radiusFillColor(Color.parseColor("#00000000")); //将自定义的myLocationStyle对象添加到地图上 aMap.setMyLocationStyle(myLocationStyle); } @OnClick({R.id.img_kml_input,R.id.img_setting_route,R.id.img_start_fly,R.id.btn_delete, R.id.img_setting_clear,R.id.btn_finish,R.id.btn_setting,R.id.btn_upload, R.id.btn_start,R.id.btn_stop,R.id.img_back}) @Override publicvoidonClick(Viewv){ switch(v.getId()){ caseR.id.img_back: SettingRouteActivity.this.finish(); break; caseR.id.img_kml_input: Intentintent=newIntent(Intent.ACTION_GET_CONTENT); intent.setType("*/*");//设置类型,我这里是任意类型,任意后缀的可以这样写。 intent.addCategory(Intent.CATEGORY_OPENABLE); startActivityForResult(intent,MyStatic.REQUEST_CODE_FILE); break; caseR.id.img_setting_route: enableDisableAdd(); break; caseR.id.img_setting_clear: runOnUiThread(newRunnable(){ @Override publicvoidrun(){ aMap.clear(); mMarkers.clear(); mPointInfo.clear(); mLinearLayoutInformation.setVisibility(View.GONE); mButtonFinish.setVisibility(View.GONE); mButtonSetting.setVisibility(View.GONE); mButtonUpload.setVisibility(View.GONE); mButtonStart.setVisibility(View.GONE); mButtonStop.setVisibility(View.GONE); } }); waypointList.clear(); waypointMissionBuilder.waypointList(waypointList); break; caseR.id.img_start_fly: atyAction(WaypointActivity.class,MyStatic.REQUEST_CODE_ID); break; caseR.id.btn_delete: runOnUiThread(newRunnable(){ @Override publicvoidrun(){ aMap.clear(); } }); for(inti=0;i-90&&latitude90?&&?longitude?>-180&&longitude180)?&&?(latitude?!=?0f?&&?longitude?!=?0f); ????????} ????????protected?BroadcastReceiver?mReceiver?=?new?BroadcastReceiver()?{ ????????????@Override ????????????public?void?onReceive(Context?context,?Intent?intent)?{ ????????????????onProductConnectionChange(); ????????????} ????????}; ????????private?void?onProductConnectionChange()?{ ????????????initFlightController(); ????????} ????????private?void?addListener()?{ ????????????if?(getWaypointMissionOperator()?!=?null)?{ ????????????????getWaypointMissionOperator().addListener(eventNotificationListener); ????????????} ????????} ????????private?void?removeListener()?{ ????????????if?(getWaypointMissionOperator()?!=?null)?{ ????????????????getWaypointMissionOperator().removeListener(eventNotificationListener); ????????????} ????????} ????????private?WaypointMissionOperatorListener?eventNotificationListener?=?new?WaypointMissionOperatorListener()?{ ????????????@Override ????????????public?void?onDownloadUpdate(WaypointMissionDownloadEvent?downloadEvent)?{ ????????????} ????????????@Override ????????????public?void?onUploadUpdate(WaypointMissionUploadEvent?uploadEvent)?{ ????????????} ????????????@Override ????????????public?void?onExecutionUpdate(WaypointMissionExecutionEvent?executionEvent)?{ ????????????} ????????????@Override ????????????public?void?onExecutionStart()?{ ????????????} ????????????@Override ????????????public?void?onExecutionFinish(@Nullable?final?DJIError?error)?{ ????????????????showToasts("Execution?finished:?"?+?(error?==?null???"Success!"?:?error.getDescription())); ????????????} ????????}; ????????public?WaypointMissionOperator?getWaypointMissionOperator()?{ ????????????if?(instance?==?null)?{ ????????????????instance?=?DJISDKManager.getInstance().getMissionControl().getWaypointMissionOperator(); ????????????} ????????????return?instance; ????????} ????????@Override ????????public?void?onMapClick(LatLng?point)?{ ????????????if?(isAdd?==?true)?{ ????????????????markWaypoint(point); ????????????????Waypoint?mWaypoint?=?new?Waypoint(point.latitude,?point.longitude,?altitude); ????????????????//Add?Waypoints?to?Waypoint?arraylist; ????????????????if?(waypointMissionBuilder?!=?null)?{ ????????????????????waypointList.add(mWaypoint); ????????????????????waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size()); ????????????????}?else?{ ????????????????????waypointMissionBuilder?=?new?WaypointMission.Builder(); ????????????????????waypointList.add(mWaypoint); ????????????????????waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size()); ????????????????} ????????????????mTextViewCount.setText("航点数:"?+?waypointMissionBuilder.getWaypointCount()); ????????????????mTextViewDistance.setText("总距离:"?+?Math.round(waypointMissionBuilder.calculateTotalDistance())?+?"m"); ????????????????mTextViewTime.setText("总时间:"?+?Math.round(waypointMissionBuilder.calculateTotalTime())?+?"min"); ????????????}?else?{ ????????????????if?(mClickMarker?!=?null?&&?mClickMarker.isInfoWindowShown())?{ ????????????????????mClickMarker.hideInfoWindow(); ????????????????????mButtonDelete.setVisibility(View.GONE); ????????????????} ????????????????//????????????showToasts("当前未开启增加点模式"); ????????????} ????????} ????????private?void?markWaypoint(LatLng?point)?{ ????????????MarkerOptions?markerOptions?=?new?MarkerOptions(); ????????????markerOptions.position(point); ????????????mPointInfo.add(new?PointInfo(point.latitude,?point.longitude)); ????????????markerOptions.title("航点"?+?(mMarkers.size()?+?1)); ????????????markerOptions.snippet("事件:"); ????????????markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)); ????????????markerOptions.infoWindowEnable(true); ????????????Marker?marker?=?aMap.addMarker(markerOptions); ????????????mMarkers.put(mMarkers.size(),?marker); ????????????marker.showInfoWindow(); ????????????if?(mMarkers.size()?>0){ mLatLng.clear(); PolylineOptionsPolylineOptions=newPolylineOptions(); for(inti=0;i0){ PolylineOptionsPolylineOptions=newPolylineOptions(); PolylineOptions.addAll(mLatLng); PolylineOptions.width(10); PolylineOptions.color(Color.argb(255,1,1,1)); aMap.addPolyline(PolylineOptions); } waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size()); mTextViewCount.setText("航点数:"+waypointMissionBuilder.getWaypointCount()); mTextViewDistance.setText("总距离:"+Math.round(waypointMissionBuilder.calculateTotalDistance())+"m"); mTextViewTime.setText("总时间:"+Math.round(waypointMissionBuilder.calculateTotalTime())+"min"); MyLog.d("航点数:"+waypointMissionBuilder.getWaypointCount()); MyLog.d("总距离:"+waypointMissionBuilder.calculateTotalDistance()); MyLog.d("总时间:"+waypointMissionBuilder.calculateTotalTime()); mButtonDelete.setVisibility(View.GONE); } /** *定位成功后回调函数 */ @Override publicvoidonLocationChanged(AMapLocationamapLocation){ if(mListener!=null&&amapLocation!=null){ if(amapLocation!=null &&amapLocation.getErrorCode()==0){ D_latitude=amapLocation.getLatitude();//获取纬度 D_longitude=amapLocation.getLongitude();//获取经度 mListener.onLocationChanged(amapLocation);//显示系统小蓝点 aMap.moveCamera(CameraUpdateFactory.zoomTo(18)); }else{ StringerrText="定位失败,"+amapLocation.getErrorCode()+":"+amapLocation.getErrorInfo(); Log.e("AmapErr",errText); } } } @Override publicvoidactivate(OnLocationChangedListenerlistener){ mListener=listener; if(mlocationClient==null){ try{ mlocationClient=newAMapLocationClient(this); }catch(Exceptione){ e.printStackTrace(); } mLocationOption=newAMapLocationClientOption(); //设置定位监听 mlocationClient.setLocationListener(this); //设置为高精度定位模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置定位参数 mLocationOption.setOnceLocation(true); mlocationClient.setLocationOption(mLocationOption); //此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, //注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求 //在定位结束后,在合适的生命周期调用onDestroy()方法 //在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除 mlocationClient.startLocation(); } } @Override publicvoiddeactivate(){ mListener=null; if(mlocationClient!=null){ mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient=null; } @Override publicViewgetInfoWindow(Markermarker){ if(infoWindow==null){ infoWindow=LayoutInflater.from(this).inflate(R.layout.amap_info_window,null); } render(marker,infoWindow); returninfoWindow; } /** *自定义infoWindow窗口 */ privatevoidrender(Markermarker,ViewinfoWindow){ TextViewtitle=infoWindow.findViewById(R.id.info_window_title); TextViewcontent=infoWindow.findViewById(R.id.info_window_content); title.setText(marker.getTitle()); content.setText(marker.getSnippet()); } @Override publicViewgetInfoContents(Markermarker){ returnnull; } @Override publicbooleanonMarkerClick(Markermarker){ marker.showInfoWindow(); mClickMarker=marker; mButtonDelete.setVisibility(View.VISIBLE); //aMap.moveCamera(CameraUpdateFactory.newCameraPosition(newCameraPosition(marker.getPosition(),18,0,0))); returntrue; } privatevoidshowSettingDialog(){ LinearLayoutwayPointSettings=(LinearLayout)getLayoutInflater().inflate(R.layout.dialog_waypointsetting,null); finalTextViewwpAltitude_TV=(TextView)wayPointSettings.findViewById(R.id.altitude); RadioGroupspeed_RG=(RadioGroup)wayPointSettings.findViewById(R.id.speed); RadioGroupactionAfterFinished_RG=(RadioGroup)wayPointSettings.findViewById(R.id.actionAfterFinished); RadioGroupheading_RG=(RadioGroup)wayPointSettings.findViewById(R.id.heading); wpAltitude_TV.setText(Math.round(altitude)+""); if(speed_RG_id!=0){ RadioButtonradioButton=(RadioButton)speed_RG.findViewById(speed_RG_id); radioButton.setChecked(true); } if(actionAfterFinished_RG_id!=0){ RadioButtonradioButton=(RadioButton)actionAfterFinished_RG.findViewById(actionAfterFinished_RG_id); radioButton.setChecked(true); } if(heading_RG_id!=0){ RadioButtonradioButton=(RadioButton)heading_RG.findViewById(heading_RG_id); radioButton.setChecked(true); } speed_RG.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){ @Override publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){ if(checkedId==R.id.lowSpeed){ mSpeed=3.0f; }elseif(checkedId==R.id.MidSpeed){ mSpeed=5.0f; }elseif(checkedId==R.id.HighSpeed){ mSpeed=10.0f; } speed_RG_id=checkedId; } }); actionAfterFinished_RG.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){ @Override publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){ MyLog.d("选择动作完成"); if(checkedId==R.id.finishNone){ mFinishedAction=WaypointMissionFinishedAction.NO_ACTION; FinishedAction="0"; }elseif(checkedId==R.id.finishGoHome){ mFinishedAction=WaypointMissionFinishedAction.GO_HOME; FinishedAction="1"; }elseif(checkedId==R.id.finishAutoLanding){ mFinishedAction=WaypointMissionFinishedAction.AUTO_LAND; FinishedAction="2"; }elseif(checkedId==R.id.finishToFirst){ mFinishedAction=WaypointMissionFinishedAction.GO_FIRST_WAYPOINT; FinishedAction="3"; } actionAfterFinished_RG_id=checkedId; } }); heading_RG.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){ @Override publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){ MyLog.d("选择标题"); if(checkedId==R.id.headingNext){ mHeadingMode=WaypointMissionHeadingMode.AUTO; HeadingMode="0"; }elseif(checkedId==R.id.headingInitDirec){ mHeadingMode=WaypointMissionHeadingMode.USING_INITIAL_DIRECTION; HeadingMode="1"; }elseif(checkedId==R.id.headingRC){ mHeadingMode=WaypointMissionHeadingMode.CONTROL_BY_REMOTE_CONTROLLER; HeadingMode="2"; }elseif(checkedId==R.id.headingWP){ mHeadingMode=WaypointMissionHeadingMode.USING_WAYPOINT_HEADING; HeadingMode="3"; } heading_RG_id=checkedId; } }); newAlertDialog.Builder(this) .setTitle("航点设置") .setView(wayPointSettings) .setNeutralButton("设置",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intid){ StringaltitudeString=wpAltitude_TV.getText().toString(); altitude=Integer.parseInt(nulltoIntegerDefalt(altitudeString)); MyLog.e("altitude"+altitude); MyLog.e("speed"+mSpeed); MyLog.e("mFinishedAction"+mFinishedAction); MyLog.e("mHeadingMode"+mHeadingMode); configWayPointMission(); } }) .setCancelable(false) .create() .show(); } StringnulltoIntegerDefalt(Stringvalue){ if(!isIntValue(value)) value="0"; returnvalue; } booleanisIntValue(Stringval){ try{ val=val.replace("",""); Integer.parseInt(val); }catch(Exceptione){ returnfalse; } returntrue; } privatevoidconfigWayPointMission(){ if(waypointMissionBuilder==null){ waypointMissionBuilder=newWaypointMission.Builder().finishedAction(mFinishedAction) .headingMode(mHeadingMode) .autoFlightSpeed(mSpeed) .maxFlightSpeed(mSpeed) .flightPathMode(WaypointMissionFlightPathMode.NORMAL); }else{ waypointMissionBuilder.finishedAction(mFinishedAction) .headingMode(mHeadingMode) .autoFlightSpeed(mSpeed) .maxFlightSpeed(mSpeed) .flightPathMode(WaypointMissionFlightPathMode.NORMAL); } if(waypointMissionBuilder.getWaypointList().size()>0){ for(inti=0;i-1){ refreshMapPoint(Id); } break; case102: if(data.getData()!=null){ Uriuri=data.getData();//得到uri,后面就是将uri转化成file的过程。 Stringimg_path=uri.getPath(); try{ if(!TextUtils.isEmpty(img_path)){ readKml.parseKml(img_path); addSampleMarker(); } }catch(Exceptione){ e.printStackTrace(); } } break; default: break; } } privatevoidrefreshMapPoint(intid){ aMap.clear(); mMarkers.clear(); mPointInfo.clear(); mLinearLayoutInformation.setVisibility(View.GONE); mButtonFinish.setVisibility(View.GONE); mButtonSetting.setVisibility(View.GONE); mButtonUpload.setVisibility(View.GONE); mButtonStart.setVisibility(View.GONE); mButtonStop.setVisibility(View.GONE); waypointList.clear(); mSQLiteHelper=newSQLiteHelper(SettingRouteActivity.this); Cursorc=mSQLiteHelper.doSelectWaypoint(id); if(c!=null){ if(c.moveToNext()){ MyLog.d("航点:"+"{'pointInfo':"+c.getString(1)+"}"); mPointInfo.addAll(GsonUtil.GsonToBean("{'pointInfo':"+c.getString(1)+"}",Root.class).getPointInfo()); altitude=c.getFloat(2); mSpeed=c.getFloat(3); switch(c.getString(4)){ case"0": mHeadingMode=WaypointMissionHeadingMode.AUTO; break; case"1": mHeadingMode=WaypointMissionHeadingMode.USING_INITIAL_DIRECTION; break; case"2": mHeadingMode=WaypointMissionHeadingMode.CONTROL_BY_REMOTE_CONTROLLER; break; case"3": mHeadingMode=WaypointMissionHeadingMode.USING_WAYPOINT_HEADING; break; case"4": mHeadingMode=WaypointMissionHeadingMode.TOWARD_POINT_OF_INTEREST; break; } switch(c.getString(5)){ case"0": mFinishedAction=WaypointMissionFinishedAction.NO_ACTION; break; case"1": mFinishedAction=WaypointMissionFinishedAction.GO_HOME; break; case"2": mFinishedAction=WaypointMissionFinishedAction.AUTO_LAND; break; case"3": mFinishedAction=WaypointMissionFinishedAction.GO_FIRST_WAYPOINT; break; case"4": mFinishedAction=WaypointMissionFinishedAction.CONTINUE_UNTIL_END; break; } } } for(inti=0;i0){ mLatLng.clear(); PolylineOptionsPolylineOptions=newPolylineOptions(); for(inti=0;i0){ for(inti=0;i
3
航线管理
创建activity_waypoint.xml和WaypointActivity文件。
activity_waypoint.xml
WaypointActivity
@Layout(R.layout.activity_waypoint) publicclassWaypointActivityextendsBaseActivityimplementsView.OnClickListener{ @BindView(R.id.layout_waypoint) ViewmViewLayoutToolbar; @BindView(R.id.ll_waypoint) LinearLayoutmLinearLayout; @BindView(R.id.tv_toolbar_title) TextViewmTextViewToolbarTitle; @BindView(R.id.rv_waypoint) RecyclerViewmRecyclerView; privateSQLiteHelpermSQLiteHelper; privateListmWaypointInfo=newArrayList<>(); privateWaypointAdaptermWaypointAdapter; privateList mWaypointId=newArrayList<>(); privateStringStrId=""; @Override publicvoidinitViews(){ mLinearLayout.setVisibility(View.VISIBLE); mTextViewToolbarTitle.setText("航线管理"); MyStatic.isChoose=false; } @Override publicvoidinitDatas(){ mSQLiteHelper=newSQLiteHelper(WaypointActivity.this); Cursorc=mSQLiteHelper.doSelect(); if(c!=null){ while(c.moveToNext()){ mWaypointInfo.add(newWaypointInfo(c.getInt(0),c.getString(1),c.getFloat(2),c.getFloat(3), c.getString(4),c.getString(5),c.getString(6),c.getInt(7),c.getInt(8), c.getInt(9),c.getString(10))); } } c.close(); mSQLiteHelper.close(); mWaypointAdapter=newWaypointAdapter(R.layout.item_waypoint); mWaypointAdapter.setNewData(mWaypointInfo); initRv(mRecyclerView,mWaypointAdapter); mWaypointAdapter.setOnItemChildClickListener(newBaseQuickAdapter.OnItemChildClickListener(){ @Override publicvoidonItemChildClick(BaseQuickAdapteradapter,Viewview,intposition){ Intentintent=newIntent(); intent.putExtra("id",mWaypointInfo.get(position).getId()); setResult(RESULT_OK,intent); finish(); } }); mWaypointAdapter.setOnCheckboxCheckedListener(newWaypointAdapter.OnCheckboxCheckedListener(){ @Override publicvoidOnCheckboxChecked(booleanisCheck,intposition){ if(isCheck){ mWaypointId.add(position); }else{ if(mWaypointId.contains(position)){ mWaypointId.remove(position); } } } }); } @Override protectedvoidrequestData(){ } @OnClick({R.id.img_way_choose,R.id.img_way_delete,R.id.img_back}) @Override publicvoidonClick(Viewv){ switch(v.getId()){ caseR.id.img_way_choose: if(MyStatic.isChoose){ MyStatic.isChoose=false; }else{ MyStatic.isChoose=true; } if(mWaypointAdapter!=null){ mWaypointAdapter.notifyDataSetChanged(); } break; caseR.id.img_way_delete: if(mWaypointId.size()>0){ for(inti=0;i
以上代码仅供参考,如果想了解更多的大疆无人机二次开发过程可以私信我,源代码因为涉及到商业使用不能给大家共享,有什么问题我可以帮你解决。
审核编辑:汤梓红
-
Mobile
+关注
关注
0文章
518浏览量
26857 -
遥控器
+关注
关注
18文章
858浏览量
68417 -
无人机
+关注
关注
231文章
10876浏览量
187476 -
SDK
+关注
关注
3文章
1079浏览量
49412 -
大疆无人机
+关注
关注
13文章
111浏览量
30880
原文标题:基于Mobile SDK V4版固件开发大疆无人机手机端遥控器(3)
文章出处:【微信号:美男子玩编程,微信公众号:美男子玩编程】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
【Aworks申请】开放式无人机地面基站
【云智易申请】智能无人机通信
CES 2019:大疆推出带屏无人机遥控器 便携式无线电源Yoolox亮相
音圈马达装置在大疆无人机的应用
基于Mobile SDK V5版固件开发大疆无人机手机端遥控器(4)

基于Mobile SDK V5版固件开发大疆无人机手机端遥控器(5)

评论