Android RxJava第一弹之原理详解、使用详解、常用场景(基于Rxjava2.0)
Android RxJava第二弹之RxJava封装库 RxJava+Animation RxJava+Glide
Android RxJava第三弹之RxJava2.0尝鲜
前面我提到过 可以通过RxJava包装Animation (RxJava1.0),请看 Android RxJava第一弹之原理详解、使用详解、常用场景(基于Rxjava2.0)
备:本人是根据RxBinding和之前老leader的RxGlide的源码和思路写出来的,因经过本人测试,因为在订阅的时候有几十毫秒的延时,所以导致动画没有那么及时,还存在一些问题,所以现在拿出来只是作为学习原理,实际用在项目中我还需要进行完善
RxAnimation源码
public class RxObAnimation {
public static Observable<Animator> afterObAnimationCompleteListener(ObjectAnimator objectAnimator, View view) {
if (objectAnimator == null || view == null) {
return Observable.empty();
}
return Observable.create(new ObAnimationAfterCompleteOnSubscribe(objectAnimator, view));
}
}
/**
* Created by walkingMen on 2016/8/10.
*
* 注册会有延时 待解决
*/
public class ObAnimationAfterCompleteOnSubscribe implements Observable.OnSubscribe<Animator> {
final ObjectAnimator objectAnimator;
final View view;
public ObAnimationAfterCompleteOnSubscribe(ObjectAnimator objectAnimator, View view) {
this.objectAnimator = objectAnimator;
this.view = view;
}
@Override
public void call(Subscriber<? super Animator> subscriber) {
Animator.AnimatorListener animatorListener = new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
if (!subscriber.isUnsubscribed()) {
subscriber.onNext(animation);
}
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
};
objectAnimator.addListener(animatorListener);
Log.d("SHF", "ObAnimationAfterCompleteOnSubscribe--" + System.currentTimeMillis());
objectAnimator.start();
subscriber.add(new MainThreadSubscription() {
@Override
protected void onUnsubscribe() {
}
});
}
}
使用方法
Observable<Animator> animatorObservable = RxObAnimation.afterObAnimationCompleteListener(objectAnimator, view);
animatorObservable.subscribe(new Subscriber<Animator>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Animator animator) {
\\ 动画结束代码
}
});
原理简单介绍
原理很简单,就是自定义了一个Observable.OnSubscribe,在其回调里面调用objectAnimator.start(); 并且添加AnimatorListener监听,在onAnimationEnd的时候调用subscriber.onNext(animation);即可
RxJava+Glide
敬请期待……