Java 向maps api v2添加暂停和恢复addCircle

Java 向maps api v2添加暂停和恢复addCircle,java,android,google-maps,google-maps-android-api-2,Java,Android,Google Maps,Google Maps Android Api 2,我编写了这个小应用程序,通过添加带有maps api v2 meth addCircle的圆圈来跟踪我用喷雾器在野外覆盖的区域。我已经了解了如何使用OnClickListener和map.clear方法清除映射 我希望能够停止使用onclicklistener添加圆圈(暂停),并继续使用onclicklistener添加圆圈。任何人都知道我的代码中集成了什么样的内容: public class MainActivity extends Activity implements LocationLi

我编写了这个小应用程序,通过添加带有maps api v2 meth addCircle的圆圈来跟踪我用喷雾器在野外覆盖的区域。我已经了解了如何使用OnClickListener和map.clear方法清除映射

我希望能够停止使用onclicklistener添加圆圈(暂停),并继续使用onclicklistener添加圆圈。任何人都知道我的代码中集成了什么样的内容:

public class MainActivity extends Activity implements LocationListener, OnClickListener {


GoogleMap mMap;
Location myLocation;
EditText length;
String lengthString;
LocationManager locationmanager;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button start = (Button)findViewById(R.id.button1);
    start.setOnClickListener(this);

    Button clear = (Button)findViewById(R.id.button2);
    clear.setOnClickListener(this);

     mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

    if (mMap!= null) {

    mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);

    mMap.setMyLocationEnabled(true);
    mMap.animateCamera(CameraUpdateFactory.zoomBy(17));}

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub



    LocationManager locationmanager = (LocationManager) getSystemService(LOCATION_SERVICE);


    locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

     length = (EditText) findViewById(R.id.editText1); 

        lengthString = length.getText().toString();

        if (v.getId() == R.id.button2) { mMap.clear();};

        //if (v.getId() == R.id.buttonPause) {Some pause method}
             //if (v.getId() == R.id.buttonResume) {Some resume method}

}

@Override
public void onLocationChanged(Location location) {



     CircleOptions circleOptions = new CircleOptions()
        .center(new LatLng(location.getLatitude(), location.getLongitude()));
          double bacons = Double.parseDouble(lengthString);

          if (bacons >=0) {

      double radi = bacons * 0.3048;
    circleOptions.radius(radi); // In meters
    circleOptions.fillColor(0xffff0000);
    circleOptions.strokeWidth(0);

          } else { 

        double radi = 20 * 0.3048;
    circleOptions.radius(radi); // In meters
    circleOptions.fillColor(0xffff0000);
    circleOptions.strokeWidth(0);

    }
          mMap.addCircle(circleOptions);   

}
更新我添加了以下布尔if语句:

            if (v.getId() == R.id.button1) {setIt = true;};
        if (v.getId() == R.id.button2) { mMap.clear();};
        if (v.getId() == R.id.buttonPauseIt) { setIt = false;};
        if (v.getId() == R.id.buttonResume) { setIt = true;};
但是我不认为它们会被传递给我的

 if (setIt == true){
          mMap.addCircle(circleOptions);} 
在我的OnLocationChanged中找到,因为它不会停止使用暂停按钮添加圆圈

我怎么通过这个?以下是我所拥有的:

public class MainActivity extends Activity implements LocationListener, OnClickListener {


GoogleMap mMap;
Location myLocation;
EditText length;
String lengthString;
LocationManager locationmanager;
boolean setIt = true;


@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button start = (Button)findViewById(R.id.button1);
    start.setOnClickListener(this);

    Button clear = (Button)findViewById(R.id.button2);
    clear.setOnClickListener(this);

    Button resumeIt = (Button)findViewById(R.id.buttonResume);

    Button pauseIt = (Button)findViewById(R.id.buttonPauseIt);



     mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

    if (mMap!= null) {

    mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);


    mMap.setMyLocationEnabled(true);
    mMap.animateCamera(CameraUpdateFactory.zoomBy(17));}

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub



    LocationManager locationmanager = (LocationManager) getSystemService(LOCATION_SERVICE);


    locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);



     length = (EditText) findViewById(R.id.editText1); 


        lengthString = length.getText().toString();


        if (v.getId() == R.id.button1) {setIt = true;};
        if (v.getId() == R.id.button2) { mMap.clear();};
        if (v.getId() == R.id.buttonPauseIt) { setIt = false;};
        if (v.getId() == R.id.buttonResume) { setIt = true;};


}

@Override
public void onLocationChanged(Location location) {



     CircleOptions circleOptions = new CircleOptions()
        .center(new LatLng(location.getLatitude(), location.getLongitude()));
          double bacons = Double.parseDouble(lengthString);

          if (bacons >=0) {

      double radi = bacons * 0.3048;
    circleOptions.radius(radi); // In meters
    circleOptions.fillColor(0xffff0000);
    circleOptions.strokeWidth(0);

          } else { 

        double radi = 20 * 0.3048;
    circleOptions.radius(radi); // In meters
    circleOptions.fillColor(0xffff0000);
    circleOptions.strokeWidth(0);

    }
          if (setIt == true){
          mMap.addCircle(circleOptions);}   

}

只需设置一个布尔值,如果停止,则不要运行添加圆的代码。如果没有停止,则运行代码

编辑

让我在这里指出一些技巧,因为你的代码风格很糟糕

永远不要这样做

if (setIt == true)
这就像说如果真==真,只需执行
if(setIt)

所有这些东西

if (v.getId() == R.id.button1) {setIt = true;};
    if (v.getId() == R.id.button2) { mMap.clear();};
    if (v.getId() == R.id.buttonPauseIt) { setIt = false;};
    if (v.getId() == R.id.buttonResume) { setIt = true;};
您应该使用if/else语句,但最好使用基于视图id的switch语句。内联is语句也很难读取,您可以在需要调试时正确地单步执行代码

现在回到你的问题…在你的位置改变了你必须做的一切

if (setIt){
    //all code for plotting circles goes here
}else{
    //do something when you dont want to plot or just dont use an else
}

浏览您的代码,看看发生了什么。

我在上面添加了一个更新。如何将onClick中设置的布尔值传递到onLocationChanged中找到的mMap.addCircle?什么意思,看起来您已经这样做了??请参见我的编辑另外,您没有为这些按钮设置
onClickListeners
,因此它当然不会被设置