我想对列表中的每一项执行运算符。当上一项的运算符完成时,应触发列表的下一项。目前(见代码)运算符是对所有项目并行执行的。如何避免并行处理?
List<String> strings = new ArrayList<>(3);
strings.add("String1");
strings.add("String2");
strings.add("String3");
Observable<String> stringObservables = Observable.from(strings);
stringObservables
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.lift(new TranslateViewOperator( ... parameters ... ))
.subscribe();
算子定义如下:
public class TranslateViewOperator implements Observable.Operator<View, View> {
long duration;
Interpolator interpolator;
int runningAnimations;
float xTransform;
public TranslateViewOperator(float xTransform, long duration, Interpolator interpolator) {
super();
this.duration = duration;
this.interpolator = interpolator;
this.xTransform = xTransform;
}
@Override
public Subscriber<? super View> call(final Subscriber<? super View> subscriber) {
return new Subscriber<View>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(View view) {
runningAnimations++;
System.out.println("TranslateViewOperator.onNext");
ViewCompat.animate(view)
.translationX(xTransform - runningAnimations)
.scaleX(1f)
.scaleY(1f)
.setStartDelay(1000)
.setDuration(1000)
.setInterpolator(interpolator)
.withEndAction(() -> {
System.out.println("Animation finished");
});
}
};
}
}
println输出如下:
TranslateViewOperator.onNext
TranslateViewOperator.onNext
TranslateViewOperator.onNext
Animation finished
Animation finished
Animation finished
这意味着首先所有的动画都从这里开始。但是我想在上一个动画完成后开始下一个动画。
你正在寻找 Bindings.bindContent(list1, list2);
适用于 JavaFX。
在 {@link javafx.collections.ObservableList} 和 {@link java.util.List} 之间生成内容绑定。