• TextView淡入淡出效果


    经常看到有些应用里面TextView会有淡入淡出效果,给人一种眼前一亮的感觉,如下图:

    这篇文章简单介绍下它的代码实现。

    首先,可以先将此动画分解成两部分,即淡入和淡出,淡入的时候,从底部向中心点移动,移动的过程中,文字越变越清晰;

    淡出的时候,从中心点向顶部移动,移动过程中,文字越变越模糊。这其中涉及到两个属性:translationY(控件在纵向上的移动距离)、alpha(控件的不透明度)

    本章将利用属性动画实现其效果。

    首先,看淡出的实现:

    private ObjectAnimator mFadeOutObjectAnimator;
    //由于淡出,是向上移动,坐标为负,这里设定向上移动150个像素
    mFadeOutObjectAnimator = ObjectAnimator.ofFloat(mFadeinoutTv, "translationY", 0, -150);
    //动画执行时间设定为500毫秒
    mFadeOutObjectAnimator.setDuration(500);
    mFadeOutObjectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    //当前动画时间点的动画值,在0到-150之间
                    float value = (float) animation.getAnimatedValue();
                    //由于不透明度取值为0-1,故而除以150,value/150取值在-1到0之间
                    mFadeinoutTv.setAlpha(1 + value/150);
                }
            });
    mFadeOutObjectAnimator.addListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animation) {
    
                }
    
                @Override
                public void onAnimationEnd(Animator animation) {
                   //动画执行完毕后修改TextView的值
                    mFadeinoutTv.setText("124");
                }
    
                @Override
                public void onAnimationCancel(Animator animation) {
    
                }
    
                @Override
                public void onAnimationRepeat(Animator animation) {
    
                }
            });
    mFadeOutObjectAnimator.start();

    以上代码大概意思为将TextView以一定规律向上从中心点向上移动150像素,同时将TextView的不透明度从1慢慢变到0,达到TextView淡出的效果。效果如下图:

    我们再来看看淡入的实现:

    private ObjectAnimator mFadeInObjectAnimator;
    //由于是淡入,从底部向中心点移动,移动距离为150像素
    mFadeInObjectAnimator = ObjectAnimator.ofFloat(mFadeinoutTv, "translationY", 150, 0);
    //动画执行时间设置为500毫秒
    mFadeInObjectAnimator.setDuration(500);
    //动画推迟100毫秒执行
    mFadeInObjectAnimator.setStartDelay(100);
    mFadeInObjectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    //当前动画时间点的动画值
                    float value = (float) animation.getAnimatedValue();
                    //动画值在150-0之间变化,而alpha在0-1之间变化,故而alue/150
                    mFadeinoutTv.setAlpha(1 - value/150);
                }
            });
    mFadeInObjectAnimator.start();

    以上代码大概意思为将TextView以一定规律从底部向中心点移动,同时将TextView的不透明度从0慢慢变到1,达到TextView淡入的效果。效果如下图:

    好了,现在淡入、淡出两个动画都实现了,只要组合起来执行便可,如下代码:

    //AnimatorSet是可以让几个动画组合在一起执行的类
    private AnimatorSet mAnimatorSet;
    mAnimatorSet = new AnimatorSet();
    //先淡出再淡入
    mAnimatorSet.play(mFadeOutObjectAnimator).before(mFadeInObjectAnimator);
    mAnimatorSet.start();

    效果图:

    源码:

    https://github.com/taothreeyears/TextViewFadeInOut

  • 相关阅读:
    致命错误: mysql/mysql.h:没有那个文件或目录 解决办法
    [转载]解决/usr/bin/ld: cannot find lxxx 问题
    mysql5.5.25a安装:Installation of system tables failed解决办法
    ubuntu源码编译安装mysql5.5.25a
    ubuntu 11.10 安装配置NFS
    nrpe简单插件编写
    我也学erlang(五)——简单的列表处理
    C语言中自加与自减效率的思考
    DBI connect() failed: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
    std::ostream_iterator用法
  • 原文地址:https://www.cnblogs.com/tyrion/p/4337630.html
Copyright © 2020-2023  润新知