我编写了自定义observable,当用户单独移动Google Map时会发出LatLng
个对象。我也有
BehaviorSubject<Boolean> locationTracking = BehaviorSubject.create(false);
我认为是属性,表示地图是否跟随用户(&#34;跟踪位置&#34;)或不是。
行为应该是用户触摸地图后,应该关闭跟踪。如果他愿意,用户将被要求明确打开它。
所以我写了
// 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);
这里我从map发出的任何位置到false值进行映射。语法显得相当长,兼容性设置禁止lambda语法。
所以,我能够创建自己的操作,例如mapAnyToFalse
和写
// once map touched, this means turn off location tracking
cameraMove(googleMap)
.mapAnyToFalse()
.subscribe(locationTracking);
它应该是Observable
的成员,我无法触及。还有其他方法或现成的解决方案吗?
答案 0 :(得分: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;
}
}
}
(此方法可以是静态的,然后静态导入)