GoogleMapsに大量のマーカーを追加するときに便利かも。スリープさせながら追加してもマップはグリグリ動きます。
build.gradle
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.google.android.gms:play-services-maps:9.6.1'
compile 'com.google.android.gms:play-services-location:9.6.1'
compile 'io.reactivex:rxandroid:1.1.0'
}
MainActivity.java
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
final ArrayList<LatLng> latlngs = new ArrayList<>();
for(int i = 0; i < 400; i++) {
latlngs.add(new LatLng(-34, 150 + i * 1));
}
mMap.moveCamera(CameraUpdateFactory.newLatLng(latlngs.get(0)));
Observable
.create(new Observable.OnSubscribe<LatLng>() {
@Override
public void call(Subscriber<? super LatLng> subscriber) {
for(LatLng latlng : latlngs) {
sleep(100);
Log.d("デバッグ","追加");
subscriber.onNext(latlng);
}
subscriber.onCompleted();
}
})
// .onBackpressureBuffer()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<LatLng>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(LatLng latlng) {
mMap.addMarker(new MarkerOptions().position(latlng).title("YES"));
}
});
}
private void sleep(int time) {
try{
Thread.sleep(time);
}catch(InterruptedException e){}
}