Android自定义Transition动画

本文介绍了如何在Android中自定义Transition动画,包括熟悉动画原理、实现自定义Transition类、解决动画过程中的闪烁问题。通过自定义动画,可以实现更丰富的界面过渡效果。
摘要由CSDN通过智能技术生成

本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发。

曾经(或者现在)很多人说起Android和iOS都会拿Android的UI设计来开黑, “你看看人家iOS的设计, 再来看看Android的, 差距怎么就这么大呢?”, 对于这种说辞, 可以一句话来总结一下”他们还停留在4.X之前的时代”. 自从Android5.0推出Material Design设计规范后, Android在设计上早已甩那个万年不变的iOS好几十条街!

以上纯属个人看法, 请勿开黑~~, 下面进入今天的主题.

还记得我曾经有篇文章(你所不知道的Activity转场动画——ActivityOptions)是来介绍Android新的转场动画的(对于ActivityOptions还不太熟悉的朋友现在可以打开上面的文章先来了解下), 那篇文章中介绍的Android预定义的几个转场虽然在效果上已经很赞了, 但是还是很难满足我们在开发中遇到的各种需求, 那怎么办? View不能满足需求, 我们可以自定义, Transition也是一样~~, 所以这篇文章我们就来介绍一下如何自定义Transition动画.

熟悉原理

在开始自定义之前, 我们首先来简单的了解一下Transition转场动画的原理, 大家在看到你所不知道的Activity转场动画——ActivityOptions这篇文章时, 对Android提供的这种新的转场动画都震撼到了, 但是肯定有很多人对它的原理不是很请求, 尤其是Scene场景动画, 一个ImageView怎么就变着变着跳转到其他的Activity了呢? 其实它的原理很简单,Transition动画其实就是拿着第一页某个view的信息去第二页的某个view上做的动画, 这样我们在视觉上就会产生一个渐变的错觉~

玩玩Transition

在稍微了解了一下原理之后, 我们就来玩玩Transition了, 如何自定义一个Transition呢? 跟自定义view我们需要继承View或者ViewGroup一样, 这里我们需要继承Transition类.

public class MyTransition extends Transition {
   }

有两个抽象方法必须要要重写,

public class MyTransition extends Transition {
   

    @Override
    public void captureStartValues(TransitionValues transitionValues) {

    }

    @Override
    public void captureEndValues(TransitionValues transitionValues) {

    }
}

除了这两个必须要重写的方法, 我们还要重写一个createAnimator方法来自定义动画, 于是, 我们要自定义一个Transition, 一个类的结构肯定是肯定是这样的.

public class MyTransition extends Transition {
   

    @Override
    public void captureStartValues(TransitionValues transitionValues) {

    }

    @Override
    public void captureEndValues(TransitionValues transitionValues) {

    }

    @Override
    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues, final TransitionValues endValues) {
    }
}

ok, 下面我们来详细说一下这三个方法都是用来干嘛的.
首先captureStartValues, 从字面上来看是用来收集开始信息的, 什么开始信息? 当然是动画的开始信息了. 那同样的captureEndValues是用来收集动画结束的信息的. 收集完了信息,就要通过createAnimator来创建个Animator供系统调用了.

再来看看TransitionValues这个陌生的类, 这个类其实很简单, 只有两个成员变量viewvalues, view指的是我们要从哪个view上收集信息, values是用来存放我们收集到的信息的. 比如: 在captureStartValues里, transitionValues.view指的就是我们在开始动画的界面上的那个view, 在captureEndValues指的就是在目标界面上的那个view.

好了, 上面几个方法的作用介绍完毕后, 我们马上就来完成一个进入消息内容的动画效果, 还是老规矩, 在开始代码之前, 我们先来看看效果.

唉, 在ubuntu上录屏有点费劲, 效果不咋地, 凑活着看, 或者可以在文章最后的链接自己下载本文的demo源码自己运行看~

仔细观察效果, 我们可以找到两处动画.

  1. 单行内容从它在列表中的位置移动到界面的最上面.
  2. 消息的内容由单行逐渐展开.
  3. 这两个动画是顺序执行的

通过上面的分析, 我们大致可以得出, 下面, 我们需要收集的信息有

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亓斌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值