2016-09-17 91 views
0

我在地图上添加了折线,并启用了setClickable(true)但是当我从Clickable使用不起作用时?Android- onPolylineClick不起作用?

private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>>> { 

    @Override 
    protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) { 

     JSONObject jObject; 
     List<List<HashMap<String, String>>> routes = null; 

     try{ 
      jObject = new JSONObject(jsonData[0]); 
      parser = new DirectionsJSONParser(); 

      // Starts parsing data 
      routes = parser.parse(jObject); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return routes; 
    } 

    @Override 
    protected void onPostExecute(List<List<HashMap<String, String>>> result) { 
     ArrayList<LatLng> points = null; 
     PolylineOptions lineOptions = null; 
     MarkerOptions markerOptions = new MarkerOptions(); 

     // Traversing through all the routes 
     for(int i=0;i<result.size();i++){ 
      points = new ArrayList<LatLng>(); 
      lineOptions = new PolylineOptions(); 
      String color = colors[i % colors.length]; 
      // Fetching i-th route 
      List<HashMap<String, String>> path = result.get(i); 

      // Fetching all the points in i-th route 
      for(int j=0;j<path.size();j++){ 
       HashMap<String,String> point = path.get(j); 

       double lat = Double.parseDouble(point.get("lat")); 
       double lng = Double.parseDouble(point.get("lng")); 
       LatLng position = new LatLng(lat, lng); 

       points.add(position); 
      } 

      // Adding all the points in the route to LineOptions 
      lineOptions.addAll(points); 
      lineOptions.width(15); 
      lineOptions.clickable(true); 
      lineOptions.color(Color.parseColor(color)); 
      // Drawing polyline in the Google Map for the i-th route 
      Polyline polyline = mMap.addPolyline(lineOptions); 
      polyline.setClickable(true); 

     } 
    } 
} 

然后我implements GoogleMap.OnPolylineClickListener

@Override 
public void onPolylineClick(Polyline polyline) { 
    Log.i("LOG","OK"); 
} 

我看不到任何log

回答

0

我看到这个样品和解决我的问题:

public class PolylineDemoActivity extends AppCompatActivity 
     implements OnSeekBarChangeListener, OnMapReadyCallback { 

    private static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298); 

    private static final LatLng SYDNEY = new LatLng(-33.87365, 151.20689); 

    private static final LatLng ADELAIDE = new LatLng(-34.92873, 138.59995); 

    private static final LatLng PERTH = new LatLng(-31.95285, 115.85734); 

    private static final LatLng LHR = new LatLng(51.471547, -0.460052); 

    private static final LatLng LAX = new LatLng(33.936524, -118.377686); 

    private static final LatLng JFK = new LatLng(40.641051, -73.777485); 

    private static final LatLng AKL = new LatLng(-37.006254, 174.783018); 

    private static final int WIDTH_MAX = 50; 

    private static final int HUE_MAX = 360; 

    private static final int ALPHA_MAX = 255; 

    private Polyline mMutablePolyline; 

    private Polyline mClickablePolyline; 

    private SeekBar mColorBar; 

    private SeekBar mAlphaBar; 

    private SeekBar mWidthBar; 

    private CheckBox mClickabilityCheckbox; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.polyline_demo); 

     mColorBar = (SeekBar) findViewById(R.id.hueSeekBar); 
     mColorBar.setMax(HUE_MAX); 
     mColorBar.setProgress(0); 

     mAlphaBar = (SeekBar) findViewById(R.id.alphaSeekBar); 
     mAlphaBar.setMax(ALPHA_MAX); 
     mAlphaBar.setProgress(255); 

     mWidthBar = (SeekBar) findViewById(R.id.widthSeekBar); 
     mWidthBar.setMax(WIDTH_MAX); 
     mWidthBar.setProgress(10); 

     mClickabilityCheckbox = (CheckBox) findViewById(R.id.toggleClickability); 

     SupportMapFragment mapFragment = 
       (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap map) { 
     // Override the default content description on the view, for accessibility mode. 
     // Ideally this string would be localised. 
     map.setContentDescription("Google Map with polylines."); 

     // A simple polyline with the default options from Melbourne-Adelaide-Perth. 
     map.addPolyline((new PolylineOptions()) 
       .add(MELBOURNE, ADELAIDE, PERTH)); 

     // A geodesic polyline that goes around the world. 
     mClickablePolyline = map.addPolyline((new PolylineOptions()) 
       .add(LHR, AKL, LAX, JFK, LHR) 
       .width(5) 
       .color(Color.BLUE) 
       .geodesic(true) 
       .clickable(mClickabilityCheckbox.isChecked())); 

     // Rectangle centered at Sydney. This polyline will be mutable. 
     int radius = 5; 
     PolylineOptions options = new PolylineOptions() 
       .add(new LatLng(SYDNEY.latitude + radius, SYDNEY.longitude + radius)) 
       .add(new LatLng(SYDNEY.latitude + radius, SYDNEY.longitude - radius)) 
       .add(new LatLng(SYDNEY.latitude - radius, SYDNEY.longitude - radius)) 
       .add(new LatLng(SYDNEY.latitude - radius, SYDNEY.longitude + radius)) 
       .add(new LatLng(SYDNEY.latitude + radius, SYDNEY.longitude + radius)); 
     int color = Color.HSVToColor(
       mAlphaBar.getProgress(), new float[]{mColorBar.getProgress(), 1, 1}); 
     mMutablePolyline = map.addPolyline(options 
       .color(color) 
       .width(mWidthBar.getProgress()) 
       .clickable(mClickabilityCheckbox.isChecked())); 

     mColorBar.setOnSeekBarChangeListener(this); 
     mAlphaBar.setOnSeekBarChangeListener(this); 
     mWidthBar.setOnSeekBarChangeListener(this); 

     // Move the map so that it is centered on the mutable polyline. 
     map.moveCamera(CameraUpdateFactory.newLatLng(SYDNEY)); 

     // Add a listener for polyline clicks that changes the clicked polyline's color. 
     map.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener() { 
      @Override 
      public void onPolylineClick(Polyline polyline) { 
       // Flip the values of the r, g and b components of the polyline's color. 
       int strokeColor = polyline.getColor()^0x00ffffff; 
       polyline.setColor(strokeColor); 
      } 
     }); 
    } 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 
     // Don't do anything here. 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 
     // Don't do anything here. 
    } 

    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
     if (mMutablePolyline == null) { 
      return; 
     } 

     if (seekBar == mColorBar) { 
      mMutablePolyline.setColor(Color.HSVToColor(
        Color.alpha(mMutablePolyline.getColor()), new float[]{progress, 1, 1})); 
     } else if (seekBar == mAlphaBar) { 
      float[] prevHSV = new float[3]; 
      Color.colorToHSV(mMutablePolyline.getColor(), prevHSV); 
      mMutablePolyline.setColor(Color.HSVToColor(progress, prevHSV)); 
     } else if (seekBar == mWidthBar) { 
      mMutablePolyline.setWidth(progress); 
     } 
    } 

    /** 
    * Toggles the clickability of two polylines based on the state of the View that triggered this 
    * call. 
    * This callback is defined on the CheckBox in the layout for this Activity. 
    */ 
    public void toggleClickability(View view) { 
     if (mClickablePolyline != null) { 
      mClickablePolyline.setClickable(((CheckBox) view).isChecked()); 
     } 
     if (mMutablePolyline != null) { 
      mMutablePolyline.setClickable(((CheckBox) view).isChecked()); 
     } 
    } 
}