Java 向maps api v2添加暂停和恢复addCircle
我编写了这个小应用程序,通过添加带有maps api v2 meth addCircle的圆圈来跟踪我用喷雾器在野外覆盖的区域。我已经了解了如何使用OnClickListener和map.clear方法清除映射 我希望能够停止使用onclicklistener添加圆圈(暂停),并继续使用onclicklistener添加圆圈。任何人都知道我的代码中集成了什么样的内容: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
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
,因此它当然不会被设置