我有一个android studio活动,加载后会加载并显示地图片段。问题是活动打开时会显示一个空地图。然后几秒钟后,地图将更新为myGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 4));
我如何制作地图,以便仅在movecamera线设置正确位置后才显示地图?
这里是我的活动代码:谢谢
public class actWhereBeen extends AppCompatActivity implements OnMapReadyCallback {
private GoogleMap myGoogleMap;
private static String TAG = "actWhereBeen";
Context context;
clsSqliteHandler mySqliteHandler = new clsSqliteHandler();
ProgressBar progressBar;
SQLiteDatabase sqLiteDatabase;
SupportMapFragment mMapFragment = SupportMapFragment.newInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_act_where_been);
context = this;
sqLiteDatabase = openOrCreateDatabase("wildlife_db",MODE_PRIVATE,null);
addMapFragment();
// progressBar = findViewById(R.id.progressBar);
////
// progressBar.setVisibility(View.VISIBLE);
////
// locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(context);
//
// dblCrntLat = -27.8885;
// dblCrntLong = 32.7777;
//
// SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapWhere);
// supportMapFragment.getMapAsync(this);
}
private void addMapFragment() {
mMapFragment.getMapAsync(this);
getSupportFragmentManager().beginTransaction()
.replace(R.id.mapWhere, mMapFragment)
.commit();
}
@Override
public void onMapReady(GoogleMap googleMap) {
myGoogleMap = googleMap;
Region region = new Region();
region = region.getRegionFromKey(sqLiteDatabase,1);
Double dblLatCenter = region.getCenter_lat();
Double dblLongCenter = region.getCenter_long();
LatLng marker = new LatLng(dblLatCenter, dblLongCenter);
myGoogleMap.getUiSettings().setRotateGesturesEnabled(false);
myGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 4));
Cursor csrSightings = getSightingsCursor();
addMarkersToMap(csrSightings);
}
public Cursor getSightingsCursor() {
// an array for the filter values
List<String> arrWhere = new ArrayList<String>();
String[] finalValue = new String[ arrWhere.size() ];
arrWhere.toArray( finalValue );
// an array for the columns to return
List<String> arrCols = new ArrayList<String>();
arrCols.add("latitude");
arrCols.add("longitude");
Cursor csrCoords = mySqliteHandler.getCursorAllPurpose(false, "tbl_fact_sightings", arrCols, "", arrWhere,
null, null, null);
return csrCoords;
}
public void addMarkersToMap(Cursor csrSightings){
int intCount = csrSightings.getCount();
if (intCount > 0) {
for( csrSightings.moveToFirst(); !csrSightings.isAfterLast(); csrSightings.moveToNext() ) {
Double dblLat = Double.valueOf(csrSightings.getString(0));
Double dblLong = Double.valueOf(csrSightings.getString(1));
populateMap(dblLat, dblLong);
}
}
}
public void populateMap(Double dblLat, Double dblLong){
// Create a mutable bitmap
Bitmap bitMap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
bitMap = bitMap.copy(bitMap.getConfig(), true);
// Construct a canvas with the specified bitmap to draw into
Canvas canvas = new Canvas(bitMap);
// Create a new paint with default settings.
Paint paint = new Paint();
// smooths out the edges of what is being drawn
paint.setAntiAlias(true);
// set color
paint.setColor(Color.BLUE);
// set style
paint.setStyle(Paint.Style.FILL);
// set stroke
paint.setStrokeWidth(4.5f);
// draw circle with radius 30
canvas.drawCircle(50, 50, 15, paint);
LatLng marker = new LatLng(dblLat, dblLong);
myGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 3));
myGoogleMap.addMarker(new MarkerOptions().title("Test")
.position(marker)
.icon(BitmapDescriptorFactory.fromBitmap(bitMap)
));
}
}
仅创建标记图标位图一次。
公共类actWhereBeen扩展了AppCompatActivity,实现了OnMapReadyCallback {位图mMarkerIcon; //“全局”变量
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMarkerIcon = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
mMarkerIcon = mMarkerIcon.copy(mMarkerIcon.getConfig(), true);
// Construct a canvas with the specified bitmap to draw into
Canvas canvas = new Canvas(mMarkerIcon);
// Create a new paint with default settings.
Paint paint = new Paint();
// smooths out the edges of what is being drawn
paint.setAntiAlias(true);
// set color
paint.setColor(Color.BLUE);
// set style
paint.setStyle(Paint.Style.FILL);
// set stroke
paint.setStrokeWidth(4.5f);
// draw circle with radius 30
canvas.drawCircle(50, 50, 15, paint);
...
}
在populateMap()
中,仅设置先前创建的位图:
...
LatLng marker = new LatLng(dblLat, dblLong);
myGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 3));
myGoogleMap.addMarker(new MarkerOptions().title("Test")
.position(marker)
.icon(BitmapDescriptorFactory.fromBitmap(mMarkerIcon)
));
删除moveCamera()
呼叫,行:
myGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 3));
来自public void populateMap(Double dblLat, Double dblLong)
方法:
public void populateMap(Double dblLat, Double dblLong){
LatLng marker = new LatLng(dblLat, dblLong);
myGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 3)); // <- this line should be removed
myGoogleMap.addMarker(new MarkerOptions().title("Test")
.position(marker)
.icon(BitmapDescriptorFactory.fromBitmap(bitMap)
));
}
这不是全部优化,而是改进代码的方向。