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

使用说明:
Demo1 SimpleTransition
代码:
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
代码:
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
代码
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
;
}
});
}
}
|