android_动画总结

1.View Animation 包括Tween Animation(补间动画)和Frame Animation(逐帧动画);

1 Tween Animation

1.1.1scale

属性

    android:fromXScale    起始的X方向上相对自身的缩放比例,浮点值,例1.0无变化,0.5缩小一倍,2.0放大一倍
    android:toXScale      结尾的X方向上相对自身的缩放比例,浮点值;
    android:fromYScale    起始的Y方向上相对自身的缩放比例,浮点值,
    android:toYScale      结尾的Y方向上相对自身的缩放比例,浮点值;
    android:pivotX        缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式
        当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点
        如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点
        如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标
    android:pivotY        缩放起点Y轴坐标,取值及意义跟android:pivotX一样。

构造

    ScaleAnimation(Context context, AttributeSet attrs)  从XML文件加载动画,基本用不到
    ScaleAnimation(float fromX, float toX, float fromY, float toY)
    ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY)
    ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType,             float pivotYValue)

    scaleAnim = new ScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
    scaleAnim.setDuration(700);
    tv.startAnimation(scaleAnim);  

1.1.2.alpha

属性

    android:fromAlpha     动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
    android:toAlpha       动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明

构造

    AlphaAnimation(Context context, AttributeSet attrs)  同样,从本地XML加载动画,基本不用
    AlphaAnimation(float fromAlpha, float toAlpha)

    alphaAnim = new AlphaAnimation(1.0f,0.1f);
    alphaAnim.setDuration(3000);
    alphaAnim.setFillBefore(true);  

1.1.3.ratate

属性

    android:fromDegrees   开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
    android:toDegrees     结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
    android:pivotX        缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p
    android:pivotY        缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p

构造

    RotateAnimation(Context context, AttributeSet attrs)  从本地XML文档加载动画,同样,基本不用
    RotateAnimation(float fromDegrees, float toDegrees)
    RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
    RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float     pivotYValue)

    rotateAnim = new RotateAnimation(0, -650, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    rotateAnim.setDuration(3000);
    rotateAnim.setFillAfter(true);  

1.1.4.translate

属性

    android:fromXDelta    起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p
    android:fromYDelta    起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
    android:toXDelta      结束点X轴坐标
    android:toYDelta      结束点Y轴坐标

构造

    TranslateAnimation(Context context, AttributeSet attrs)  同样,基本不用
    TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
    TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue,         int toYType, float toYValue)

    translateAnim = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -80,
            Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -80);
    translateAnim.setDuration(2000);
    translateAnim.setFillBefore(true);  

公共属性

    android:duration      动画持续时间,以毫秒为单位
    android:fillAfter     如果设置为true,控件动画结束时,将保持动画最后时的状态
    android:fillBefore    如果设置为true,控件动画结束时,还原到开始动画前的状态
    android:fillEnabled   与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
    android:repeatCount   重复次数
    android:repeatMode    重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍
    android:interpolator  设定插值器

1.1.5.set

1.1.6.使用

     xml
     布局动画:Animation scaleAnimation= AnimationUtils.loadAnimation(this, R.anim.scaleanim);
               tv.startAnimation(scaleAnimation);  

     属性动画:ObjectAnimator scaleAnimator = (ObjectAnimator) AnimatorInflater.loadAnimator(this,     R.animator.scale_object_animator);

1.1.7.Interpolator

    AccelerateDecelerateInterpolator   在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
    AccelerateInterpolator             在动画开始的地方速率改变比较慢,然后开始加速
    AnticipateInterpolator             开始的时候向后然后向前甩
    AnticipateOvershootInterpolator    开始的时候向后然后向前甩一定值后返回最后的值
    BounceInterpolator                 动画结束的时候弹起
    CycleInterpolator                  动画循环播放特定的次数,速率改变沿着正弦曲线
    DecelerateInterpolator             在动画开始的地方快然后慢
    LinearInterpolator                 以常量速率改变
    OvershootInterpolator              向前甩一定值后再回到原来位置

1.1.8 自定义差值器

    public class MyInterploator implements TimeInterpolator {
        @Override
        public float getInterpolation(float input) {
              // TODO
        }
    }  

1.1.9 Evaluator

    自定义Evaluator
        例 public static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values);  

             public class MyEvaluator implements TypeEvaluator<Integer> {
                @Override
                public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
                   return null;  // return startvalue+fraction*(end - start)
             }
           }  

1.2 Frame Animation(逐帧动画)

    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false">  

        <item android:drawable="@drawable/f1" android:duration="300" />
        <item android:drawable="@drawable/f2" android:duration="300" />
        <item android:drawable="@drawable/f3" android:duration="300" />
        <item android:drawable="@drawable/f4" android:duration="300" />
    </animation-list>  

  //使用
    image.setBackgroundResource(R.anim.frame);
    AnimationDrawable anim = (AnimationDrawable)
    image.getBackground();
    anim.start();  

2.Property Animator包括ValueAnimator和ObjectAnimation;

2.1 ObjectAnimator

2.1.1 Translation

    ObjectAnimator anim = ObjectAnimator .ofFloat(phone, "translationX", -500f, 0f);
    ObjectAnimator anim2 = ObjectAnimator .ofFloat(phone, "translationY", -500f, 0f);

    AnimatorSet set2 = new AnimatorSet();
    set2.play(anim2).before(set3) ;
    set.play(anim).before(set2);
    set.start();

2.1.2 Alpha

   ObjectAnimator anim = ObjectAnimator.ofFloat(phone, "alpha", 1f, 0f);

2.1.3 Rotate

    ObjectAnimator anim2 = ObjectAnimator .ofFloat(phone, "rotationX", 180f, 0f);
    ObjectAnimator anim3 = ObjectAnimator .ofFloat(phone, "rotationY", 0f, 180f);
    ObjectAnimator anim4 = ObjectAnimator .ofFloat(phone, "rotation", 0, 180, 0);  

2.1.4 Scale

    ObjectAnimator anim2 = ObjectAnimator .ofFloat(phone, "scaleX", 0.5f);
    ObjectAnimator anim3 = ObjectAnimator .ofFloat(phone, "scaleY", 1f); 

2.1.5 自定义属性

属性动画自定义属性

2.1.6 propertyValuesHolder

    public void propertyValuesHolder(View view)
        {
            PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("alpha", 1f,
                    0f, 1f);
            PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleX", 1f,
                    0, 1f);
            PropertyValuesHolder pvhZ = PropertyValuesHolder.ofFloat("scaleY", 1f,
                    0, 1f);
            ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY,pvhZ).setDuration(1000).start();
        }  

2.1.7 AnimatorSet

     animSet.playTogether(anim1, anim2);
     animSet.start();

2.1.8 ViewPropertyAnimator 多属性动画

  viewPropertyAnimator animate = imageview.animate();//该对象没有setRepeat的方法
        //通过一些动画属性来设置 组合成类似set的效果
        animate.alpha(0);
        animate.rotationX(50);
        animate.translationXBy(500);
        animate.scaleX(1.5f);
        animate.scaleY(1.5f);
        animate.setInterpolator(new BounceInterpolator());
        animate.setDuration(2000);
        animate.start(); 

2.2 ValueAnimator

    ValueAnimator animator = ValueAnimator.ofInt(0,400);
    animator.setDuration(1000);  

    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            int curValue = (int)animation.getAnimatedValue();
            tv.layout(curValue,curValue,curValue+tv.getWidth(),curValue+tv.getHeight());
        }
    });
    animator.start();  

类型

    public static ValueAnimator ofInt(int... values)
    public static ValueAnimator ofFloat(float... values)  

常用方法

   设置动画时长,单位是毫秒
        ValueAnimator setDuration(long duration)
    获取ValueAnimator在运动时,当前运动点的值
        Object getAnimatedValue();
    开始动画
        void start()
    设置循环次数,设置为INFINITE表示无限循环
        void setRepeatCount(int value)
    设置循环模式  value取值有RESTART,REVERSE,
        void setRepeatMode(int value)
    取消动画
        void cancel()  

监听器

监听器一:监听动画变化时的实时值

    public static interface AnimatorUpdateListener {
            void onAnimationUpdate(ValueAnimator animation);
        } 

添加方法为:

public void addUpdateListener(AnimatorUpdateListener listener)  

监听器二:监听动画变化时四个状态

        public static interface AnimatorListener {
            void onAnimationStart(Animator animation);
            void onAnimationEnd(Animator animation);
            void onAnimationCancel(Animator animation);
            void onAnimationRepeat(Animator animation);
        }

监听器三:AnimatorListenerAdapter

移除监听

移除AnimatorUpdateListener

      void removeUpdateListener(AnimatorUpdateListener listener);
      void removeAllUpdateListeners();  

移除AnimatorListener

     void removeListener(AnimatorListener listener);
     void removeAllListeners();    

2.3 xml 使用

      Animator anim = AnimatorInflater.loadAnimator(this, R.animator.scalex);
      anim.setTarget(mMv);
      anim.start();  

3 布局动画(Layout Animations)

LayoutTransition transition = new LayoutTransition();
    transition.setAnimator(LayoutTransition.CHANGE_APPEARING,
            transition.getAnimator(LayoutTransition.CHANGE_APPEARING));
    transition.setAnimator(LayoutTransition.APPEARING,
            null);
    transition.setAnimator(LayoutTransition.DISAPPEARING,
            null);
    transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING,
            null);
    mGridLayout.setLayoutTransition(transition);      

就这样

时间: 2024-12-09 07:13:31

android_动画总结的相关文章

Android_自定义view动画按钮

昨天偶偶然看见UI 给的一个交互的效果,原图如下 就是下面的loginbutton,于是大概模仿了一下, 并没有做这个UI的全部效果,有兴趣的可以完善后面展开的效果 下面是demo的button效果 这个View用到的知识点比较简单: view的坐标系知识,(大家没有不熟悉的吧) view的canvas基本API(画矩形,画扇形,) view的自定义属性(attr提供选项) 属性动画的知识(老生常谈的知识,ObjectAnimation和ValueAniamtion) 下面我们就一步步实现这个b

android_解决2.3帧动画无效果

mIvPoint.setBackgroundResource(R.drawable.point_anim); rocketAnimation = (AnimationDrawable) mIvPoint.getBackground(); mIvPoint.post(new Runnable(){ public void run(){ rocketAnimation.start(); } });

[Android_项目]Android开源项目分类汇总

第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style等等..其他 一.ListView android-pulltorefresh一个强大的拉动刷新开源项目,支持各种控件下拉刷新

Android_(游戏)打飞机03:控制玩家飞机

Android_(游戏)打飞机01:前言 传送门 Android_(游戏)打飞机02:游戏背景滚动 传送门 Android_(游戏)打飞机03:控制玩家飞机 传送门 控制玩家飞机效果 package com.example.administrator.myapplication; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import

*C#(WPF)--矩阵拖动和矩阵动画(拖动展开,不足动画效果)

最近在研发新的项目,遇到了一个桌面模式下的难点--展开动画.之前动画这方面没做过,也许很多人开始做的时候也会遇到相关问题,因此我把几个重点及实际效果图总结展示出来: 我的开发环境是在VS2017下进行的,这个工具条主要功能是:一个工具条,可进行拖拉.可进行拖拉展开,可在拖动之后不足展开并反向继续展开剩下的部分: 一.[拖动]   拖动的核心代码是通过矩阵进行定位和拖动的,定位是以父容器为模板的.以下是核心代码(及效果图): 1 /// <summary> 2 /// 这里TitleBar代指最

android手机安全卫士、Kotlin漫画、支付宝动画、沉浸状态栏等源码

Android精选源码 轻量级底部导航栏 android手机卫士源码 android实现高仿今日头条源码 一个用Kotlin写的简单漫画App源码 android吐槽项目完整源码 实现可以滑动文字逐渐变色的TabLayout android实现将app隐藏加密功能的源码 android实现横向滚动的卡片堆叠布局 android仿支付宝的咻咻动画源码 android状态栏和沉浸式导航栏管理源码 Android优质博客 从BaseActivity与BaseFragment的封装谈起 这篇博客主要是从

如何解决IOS 动画中 Autolayout 与View Transforms的冲突

IOS 的动画放大与缩小,并非按照找它的中心点放大和缩小,而是左上角 .我分析了下原来是Autolayout 与View Transforms的冲突造成的. - (void) addSubviewWithZoomInAnimation:(UIView*)view duration:(float)secs option:(UIViewAnimationOptions)option { // first reduce the view to 1/100th of its original dimen

JS 实现无缝滚动动画原理(初学者入)

这段时间在教培训班的学生使用原生javascript实现无缝滚动的动画案例,做了这个原理演示的动画,分享给自学JS的朋友!博主希望对你们有帮助! 在讲解之前先看一下demo: demo:https://224137748.github.io/JS_warehouse/lunbo/domo.HTML源码:https://github.com/224137748/JS_warehouse/blob/master/lunbo/domo.HTML ps: 上面和下面的滚动进度是一致的,上面红色框是为了演

U3D帧动画的制作

1.打开动画编辑器(动画制作器!)windows标签下的Animation 2.点击新建一个动画,保存后进入动画编辑状态.注意新建后创建一个动画和控制器(animator Contrller),同时为当前物体添加一个animator组件. 3.选择添加property,可以选择让动画改变哪些参数. 本例中制作一个窗口打开和关闭的简单动画.通过缩放窗口大小来控制打开关闭的动画.所以添加一个Scale的参数. 4.先制作一个关闭的动画:第一帧的时候控制scale都为1,也就是正常大小.60帧的时候控