2017-01-26 5 views
2

Я написал свой пользовательский наблюдаемый, который испускает объекты LatLng, когда пользователь перемещает карту Google. Также у меня естьКак написать свою собственную операцию над наблюдаемым, чтобы отобразить все на константу?

BehaviorSubject<Boolean> locationTracking = BehaviorSubject.create(false); 

, который, я думаю, будет собственностью, указывая, следует ли карта следовать за пользователем («местоположение треков») или нет.

Поведение должно состоять в том, чтобы как только пользователь коснулся карты, отслеживание должно быть отключено. И пользователь должен будет включить его, если захочет.

Так что я написал

// once map touched, this means turn off location tracking 
    cameraMove(googleMap) 
     .map(new Func1<LatLng, Boolean>() { 
      @Override 
      public Boolean call(LatLng latLng) { 
       return false; 
      } 
     }).subscribe(locationTracking); 

здесь я сделал отображение из любого места, испускаемого картой, к ложному значению. Синтаксис выглядит довольно длинным, лямбда-синтаксис запрещен настройками совместимости.

Таким образом, я смог создать свою собственную работу, что-то вроде mapAnyToFalse и написать

// once map touched, this means turn off location tracking 
    cameraMove(googleMap) 
     .mapAnyToFalse() 
     .subscribe(locationTracking); 

Он должен быть членом Observable, который я не могу коснуться. Есть ли какие-либо другие средства или готовые решения?

ответ

4

Короткий ответ: нет, вы не можете создать такого оператора.

Ближайший синтаксис вы можете достичь будет выглядеть так:

cameraMove(googleMap) 
    .map(anyToFalse()) 
    .subscribe(locationTracking); 

Если в других местах в вашем коде, вы бы метод:

public Func1<Object, Boolean> anyToFalse() { 
    return new Func1<Object, Boolean>() { 
     @Override 
     public Boolean call(LatLng latLng) { 
      return false; 
     } 
    } 
} 

(Этот метод может быть статическим, а затем статически импортирован)

+2

Вы также можете создать класс, который реализует 'Func1 ' – Jahnold