TransitionPlayer开源动画效果库,可以轻易的创设过渡动画

TransitionPlayer开源动画效果库,可以轻易的创造过渡动画。

TransitionPlayer

  • 类别: 动画 (Animation)
  • 打分: ★★★★★
  • 更新: 2015-08-21 00:02
  • 大小: 2009 kb
  • 开发环境: Android Studio
  • 浏览: 1890 次
  • 下载: 326 次
  • 项目地址: https://github.com/XMFE-TEAM/TransitionPlayer
  • 动画
下载 收藏
介绍:
开源动画效果库,可以轻易的创造过渡动画。

运行效果:

TransitionPlayer开源动画效果库,可以轻易的创设过渡动画

使用说明:

Demo1 SimpleTransition

TransitionPlayer开源动画效果库,可以轻易的创设过渡动画

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    ......
    TransitionManager.beginDelayedTransition(mSceneRoot, transitionPlayer);
 
    imageView.setRotation(360);
    imageView.setRotationX(270);
    imageView.setRotationY(180);
    imageView.setTranslationX(70 * getResources().getDisplayMetrics().density);
    imageView.setScaleX(0.2f);
    imageView.setScaleY(0f);
    imageView.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_bright));
    ......
    drawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() {
        public void onDrawerSlide(View drawerView, float slideOffset) {
            transitionPlayer.setCurrentFraction(slideOffset);
        }
    });

Demo2 MaterialMenu

TransitionPlayer开源动画效果库,可以轻易的创设过渡动画

代码:

1
2
3
4
5
6
7
8
9
10
    ......
    int[] layouts = new int[]{R.layout.material_menu_option, R.layout.material_menu_back, R.layout.material_menu_y};
    Scene scene = Scene.getSceneForLayout(mSceneRoot, layout[random.nextInt(layouts.length)], context);
    TransitionManager.go(scene, transitionPlayer);
    ......
    drawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() {
        public void onDrawerSlide(View drawerView, float slideOffset) {
            transitionPlayer.setCurrentFraction(slideOffset);
        }
    });

Demo3 ChromeAppIndexPage

TransitionPlayer开源动画效果库,可以轻易的创设过渡动画

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package com.linfaxin.transitionplayer.demo;
 
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.transitions.everywhere.ChangeBounds;
import android.transitions.everywhere.Scene;
import android.transitions.everywhere.Transition;
import android.transitions.everywhere.TransitionManager;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.animation.DecelerateInterpolator;
 
import com.daimajia.swipe.SwipeLayout;
import com.linfaxin.transitionplayer.AnimatorUtils;
import com.linfaxin.transitionplayer.interpolators.LockEndTimeInterpolator;
import com.linfaxin.transitionplayer.interpolators.LockStartTimeInterpolator;
import com.linfaxin.transitionplayer.interpolators.MultiTimeInterpolator;
import com.linfaxin.transitionplayer.interpolators.ReverseTimeInterpolator;
import com.linfaxin.transitionplayer.transitions.ChangeAlpha;
import com.linfaxin.transitionplayer.TransitionPlayer;
import com.linfaxin.transitionplayer.control.ModifyAnimatorsPlayControl;
import com.linfaxin.transitionplayer.transitions.ChangeTextColor;
 
/**
 * Created by linfaxin on 2015/8/2.
 * Email: linlinfaxin@163.com
 */
public class ChromeHomeDemo extends ActionBarActivity{
    SwipeLayout swipeLayout;
    TransitionPlayer transitionPlayer = new TransitionPlayer();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.demo_chrome_home);
 
        swipeLayout = (SwipeLayout) findViewById(R.id.swipeLayout);
        swipeLayout.getDragEdgeMap().clear();
        swipeLayout.addDrag(SwipeLayout.DragEdge.Top, swipeLayout.getChildAt(0));
 
        swipeLayout.addRevealListener(R.id.placeHolder, new SwipeLayout.OnRevealListener() {
            @Override
            public void onReveal(View child, SwipeLayout.DragEdge edge, float fraction, int distance) {
                transitionPlayer.setCurrentFraction(fraction);
 
            }
        });
 
        swipeLayout.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                swipeLayout.getViewTreeObserver().removeOnPreDrawListener(this);
                ViewGroup mSceneRoot = (ViewGroup) findViewById(R.id.sceneRootView);
                Scene scene = Scene.getSceneForLayout(mSceneRoot, R.layout.chrome_home_head_state_expand, ChromeHomeDemo.this);
 
                transitionPlayer.setPlayControl(new ModifyAnimatorsPlayControl() {
                    @Override
                    protected Animator onModifyAnimator(Transition transition, ValueAnimator animator) {
                        if (!(animator instanceof ObjectAnimator)) return animator;
                        Object target = ((ObjectAnimator) animator).getTarget();
                        if (!(target instanceof View)) return animator;
                        View targetView = (View) target;
 
                        //input view
                        if (targetView.getId() == R.id.editText) {
                            if (transition instanceof ChangeBounds) {
                                AnimatorSet animatorSet = new AnimatorSet();
                                for (ValueAnimator subAnimator : AnimatorUtils.splitAnimatorByValues(animator)) {
                                    animatorSet.playTogether(subAnimator);
 
                                    //let input view fast animate to right edge
                                    if (subAnimator instanceof ObjectAnimator
                                            && "right".equals(((ObjectAnimator) subAnimator).getPropertyName())) {
                                        MultiTimeInterpolator multi = new MultiTimeInterpolator();
                                        TimeInterpolator i = animator.getInterpolator();
                                        multi.addInterpolator(i, 6);
                                        LockEndTimeInterpolator end = new LockEndTimeInterpolator(i);
                                        multi.addInterpolator(end, 4);
                                        subAnimator.setInterpolator(multi);
                                    }
                                }
                                return animatorSet;
                            else if (transition instanceof ChangeTextColor) {
                                TimeInterpolator i = animator.getInterpolator();
                                LockEndTimeInterpolator end = new LockEndTimeInterpolator(i);
                                ReverseTimeInterpolator r = new ReverseTimeInterpolator(i);
                                animator.setInterpolator(new MultiTimeInterpolator(i, end, r));
                            }
                        }
 
                        //logo view
                        if (targetView.getId() == R.id.imageView && transition instanceof ChangeAlpha) {
                            MultiTimeInterpolator multi = new MultiTimeInterpolator();
                            TimeInterpolator i = new DecelerateInterpolator(1.6f);
                            TimeInterpolator start = new LockStartTimeInterpolator(i);
                            multi.addInterpolator(start, 4);
                            multi.addInterpolator(i, 6);
                            animator.setInterpolator(multi);
                        }
                        return animator;
                    }
                });
 
 
 
                TransitionManager.go(scene, transitionPlayer);
 
                //after start transition, then init click.
                mSceneRoot.findViewById(R.id.editText).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        swipeLayout.close();
                    }
                });
 
                return false;
            }
        });
    }
}