Android RxJava第二弹之RxJava封装库 RxJava+Animation RxJava+Glide

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

敬请期待……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值