Lollipop为咱们带来很多动画,简单而有效,灵活运用提高APP逼格javascript
Activity过渡动画包含两部分 : java
fade (淡入淡出) : 经过改变视图的透明度来添加或者移除视图android
使用 :
初始Activity:git
startActivity(mIntent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
目标跳转Activity :github
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
less
getWindow().setExitTransition()
- 当A 跳转到 B时,使A中的View退出场景的transitionide
getWindow().setEnterTransition()
: 当A 跳转到 B时,使B中的View进入场景的transitiongetWindow().setReturnTransition()
: 当B 返回到 A时,使B中的View退出场景的transitiongetWindow().setReenterTransition()
: 当B 返回到 A时,使A中的View进入场景的transition上述设置须要在setContentView()
以前设置布局
一共就是上述三种模式: Explode
、Slide
、 Fade
、动画
效果如图:this
changeBounds
: 捕获共享元素的layout bound,而后播放layout bound变化动画。ChangeBounds 是共享元素变换中用的最多的,由于先后两个activity中共享元素的大小和位置通常都是不一样的。changeClipBounds
: 裁剪目标视图边界,捕获共享元素clip bounds,而后播放clip bounds变化动画。changeTransform
: 捕获共享元素的缩放(scale)与旋转(rotation)属性 ,而后播放缩放(scale)与旋转(rotation)属性变化动画。changeImageTransform
:捕获共享元素(ImageView)的transform matrices 属性,而后播放ImageViewtransform matrices 属性变化动画。与ChangeBounds相结合,这个变换可让ImageView在动画中高效实现大小,形状或者ImageView.ScaleType 属性平滑过分。效果图:
android:transitionName="one"
里面的值是本身定的一个标识,可是必须保持两边一致getWindow().setSharedElementEnterTransition();
: A->B,B进入动画getWindow().setSharedElementExitTransition();
: A->B,A退出动画getWindow().setSharedElementReenterTransition();
: B->A,A进入动画getWindow().setSharedElementReturnTransition();
: B->A,B退出动画startActivity(mIntent,
ActivityOptions.makeSceneTransitionAnimation(this,
Pair.create(ivImageI, "one"), // 设置共享的控件和他的Tag 就能够了
Pair.create(ivImageIi, "two"))
.toBundle());复制代码
十分简单在Xml中控件添加
android:background="?android:attr/selectableItemBackground"
android:background="?android:attr/selectableItemBackgroundBorderless"
这个是系统默认的
自定义Ripple一样简单,当即上手
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#cb2eff" android:radius="500dp"> <item android:drawable="@color/blue_i"/> </ripple>复制代码
android:background="@drawable/ripple_red"
其实就是一个圆形路径绘制。
和Animator的使用基本一致
API解析:
ViewAnimationUtils.createCircularReveal(view, centerX, centerY, startRadius, endRadius);
view
: 动画的做用目标centerX
: 动画开始的中心点X坐标centerY
: 动画开始的中心点Y坐标startRadius
: 动画开始时的圆半径endRadius
: 动画结束时的圆的半径两种应用:
//设置顶布局过渡动画
llRoot.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
//当布局已经彻底展现出来再开始动画
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
v.removeOnLayoutChangeListener(this);
Animator circularReveal = ViewAnimationUtils.createCircularReveal(
llRoot,
llRoot.getWidth() / 2,
llRoot.getHeight() / 2,
50,
1000);
circularReveal.setInterpolator(new AccelerateDecelerateInterpolator());
circularReveal.setDuration(1000);
circularReveal.start();
}
});
// 控件设置点击动画效果
ivImageI.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//实现从左上角开始的扇形展开动画
Animator circularReveal = ViewAnimationUtils.createCircularReveal(
ivImageI,
0,
0,
0,
ivImageI.getWidth()+159);
circularReveal.setInterpolator(new AccelerateDecelerateInterpolator());
circularReveal.setDuration(1000);
circularReveal.start();
}
});复制代码
效果图:
Lollipop 中添加的动画效果仍是十分不错的,并且使用也是十分简单高效
将有需求的动画效果封装在本身的基类文件中使用起来就更加顺畅了若是觉有有用,能够点赞鼓励一下哈O(∩_∩)O~~
附上:代码Github