Android Google地图未绘制最后一条多段线

Android Google地图未绘制最后一条多段线,android,google-maps,polyline,Android,Google Maps,Polyline,我想实现多边形添加模块,为当前设备显示黄线,为历史轨迹显示红线。但是当涉及到执行的时候。我发现黄针和红针之间的最后一条线没有画出来。我已尝试设置子列表参数以设置要绘制的点的子列表,但绘制最后一段是无效的。你能告诉我如何画多段线的最后一段吗 公共类MainActivity扩展FragmentActivity实现LocationListener{ final int RQS_GooglePlayServices = 1; private GoogleMap myMap;

我想实现多边形添加模块,为当前设备显示黄线,为历史轨迹显示红线。但是当涉及到执行的时候。我发现黄针和红针之间的最后一条线没有画出来。我已尝试设置子列表参数以设置要绘制的点的子列表,但绘制最后一段是无效的。你能告诉我如何画多段线的最后一段吗

公共类MainActivity扩展FragmentActivity实现LocationListener{

    final int RQS_GooglePlayServices = 1;

    private GoogleMap myMap;
    Location myLocation;
    LocationManager lm;
    private ArrayList<Checkpoint> cpList = new ArrayList<Checkpoint> ();
    private ArrayList<Marker> thisMarkerList = new ArrayList<Marker> ();
    private List<LatLng> ppoints = new ArrayList<LatLng> ();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SupportMapFragment sFragment =  (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        myMap =  sFragment.getMap();
        myMap.setMyLocationEnabled(true);
        myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        lm = (LocationManager) getSystemService (LOCATION_SERVICE);
        String provider = lm.getBestProvider(new Criteria(), true);
        Location loc = lm.getLastKnownLocation(provider);
        if(loc!=null)
        {
            onLocationChanged(loc);
        }

        myMap.setOnMapLongClickListener(setting());

    }


    private OnMapLongClickListener setting() {
        // TODO Auto-generated method stub
        return new OnMapLongClickListener(){

            @Override
            public void onMapLongClick(LatLng point) {
                // TODO Auto-generated method stub
                Log.d (point.toString() , "user one long click");

                Checkpoint cp = new Checkpoint("Destination", point, 0);
                cpList.add(cp);
                Checkpoint lastlyAdded = cpList.get(cpList.size() -1 );
                Log.d("size" , String.valueOf(cpList.size()));

                //  myMap.clear();
                for(int i = 0 ; i < cpList.size() ; i ++){
                    Checkpoint cPoint =  cpList.get(i);
                    if(!cPoint.getPoint().equals(lastlyAdded.getPoint())){
                        cPoint.setState(1); 
                        cPoint.setDesp("Checkpoint "+String.valueOf(i+1) );
                    }
                }
                addMarkersToMap();
            }};
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onResume() {

        super.onResume();
        int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());

        if (resultCode == ConnectionResult.SUCCESS) {
            Toast.makeText(getApplicationContext(),
                    "isGooglePlayServicesAvailable SUCCESS", Toast.LENGTH_LONG)
                    .show();
        } else {
            GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                    RQS_GooglePlayServices);
        }
    }

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        LatLng latlng = new LatLng(location.getLatitude() , location.getLongitude());
        myMap.moveCamera(CameraUpdateFactory.newLatLng(latlng));
        myMap.animateCamera(CameraUpdateFactory.zoomTo(11));
    }


    private void addMarkersToMap() {
        myMap.clear();
        ppoints.clear();
        PolylineOptions polylineOptions = null ;
        LatLng ll; 
        for (int i = 0; i < cpList.size(); i++) {         
            ll = new LatLng(cpList.get(i).getPoint().latitude, cpList.get(i).getPoint().longitude);
            BitmapDescriptor bitmapMarker;
            polylineOptions = new PolylineOptions();
            polylineOptions.color(Color.YELLOW);
            polylineOptions.width(5);
            switch (cpList.get(i).getState()) {
            case 0:
                bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW);               
                break;
            case 1:
                bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED);  
                break;
            case 2:
                bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE);
                break;
            default:
                bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED);
                break;
            }   
            ppoints.add(ll);
            thisMarkerList.add(myMap.addMarker(new MarkerOptions().position(ll).title(cpList.get(i).getDesp()) 
                    .snippet(String.valueOf(cpList.get(i).getPoint().latitude) + "," + 
                            String.valueOf(cpList.get(i).getPoint().longitude))
                            .icon(bitmapMarker)));

        }
        int length  = ppoints.size();
        if(length >2){
myMap.addPolyline(new PolylineOptions().width(5).color(Color.RED).addAll(ppoints.subList(0, ppoints.size())));
        myMap.addPolyline(new PolylineOptions().width(5).color(Color.YELLOW).addAll(ppoints.subList(ppoints.size()-2, ppoints.size())));
        }else{

            myMap.addPolyline(new PolylineOptions().width(5).color(Color.YELLOW).addAll(ppoints));
        }

    }
}
final int RQS_GooglePlayServices=1;
私人谷歌地图;
位置;
位置经理lm;
private ArrayList cpList=new ArrayList();
private ArrayList thisMarkerList=new ArrayList();
私有列表ppoints=newarraylist();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SupportMapFragment sFragment=(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
myMap=sFragment.getMap();
myMap.setMyLocationEnabled(true);
setMapType(GoogleMap.MAP\u TYPE\u HYBRID);
lm=(位置管理器)getSystemService(位置服务);
字符串提供程序=lm.getBestProvider(新条件(),true);
位置loc=lm.getLastKnownLocation(提供方);
如果(loc!=null)
{
位置改变(loc);
}
setOnMapLongClickListener(设置());
}
私有OnMapLongClickListener设置(){
//TODO自动生成的方法存根
返回新的OnMapLongClickListener(){
@凌驾
在马普隆喀喇克(LatLng点)上的公共空隙{
//TODO自动生成的方法存根
Log.d(point.toString(),“用户长按一次”);
检查点cp=新检查点(“目的地”,点,0);
cpList.add(cp);
检查点lastlyAdded=cpList.get(cpList.size()-1);
Log.d(“size”,String.valueOf(cpList.size());
//myMap.clear();
对于(int i=0;i2){
myMap.addPolyline(新的PolylineOptions().width(5)、color(color.RED)、addAll(ppoints.subList(0,ppoints.size()));
myMap.addPolyline(新的PolylineOptions().width(5)、color(color.YELLOW)、addAll(ppoints.subList(ppoints.size()-2,ppoints.size()));
}否则{
添加多段线(新的多段线选项().width(5).color(color.YELLOW).addAll(ppoints));
}
}
}

而不是将全部添加到黄色多段线