구글 맵에서 RxJava 비동기를 사용하여 대량의 태그를 추가

8989 단어 Android
Google Maps에 대량의 태그를 추가할 때 편리할 수 있습니다.수면과 동시에 추가되더라도 지도는 그린 속에서 이동한다.

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){}
    }

좋은 웹페이지 즐겨찾기