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);      

就这样

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Studio中的逐帧动画是指将一系列静态图像按照一定的顺序快速播放,形成动画效果。在Android Studio中,可以使用AnimationDrawable类来实现逐帧动画。具体步骤如下: 1. 在res/drawable目录下创建一个XML文件,用于定义逐帧动画。例如,可以创建一个名为animation.xml的文件。 2. 在XML文件中,使用<animation-list>标签定义逐帧动画。在<animation-list>标签中,使用<item>标签定义每一帧的图像。例如,可以使用以下代码定义一个逐帧动画,其中包含三张图像: <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/frame1" android:duration="100" /> <item android:drawable="@drawable/frame2" android:duration="100" /> <item android:drawable="@drawable/frame3" android:duration="100" /> </animation-list> 3. 在Java代码中,使用AnimationDrawable类加载XML文件,并将其设置为ImageView的背景。例如,可以使用以下代码实现逐帧动画: ImageView imageView = findViewById(R.id.imageView); AnimationDrawable animationDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.animation); imageView.setBackground(animationDrawable); animationDrawable.start(); 4. 运行应用程序,即可看到逐帧动画效果。 需要注意的是,逐帧动画可能会占用较多的内存和CPU资源,因此应该谨慎使用。如果需要实现复杂的动画效果,建议使用属性动画或帧动画。 ### 回答2: Android Studio是一个用于开发Android应用程序的集成开发环境(IDE)。Android Studio内置了许多功能强大的工具和组件,包括逐帧动画的支持。 逐帧动画是一种动画效果,在Android应用程序中经常被使用。它是通过连续显示一系列不同的图像帧来产生动画效果的。在Android Studio中,我们可以使用逐帧动画来为应用程序添加各种各样的动画效果。 要在Android Studio中创建一个逐帧动画,我们首先需要准备一系列的图像帧。这些图像帧可以是不同的PNG或JPEG图像文件,或者是通过Android Studio内置的绘图工具绘制出来的。然后,我们可以在res目录下创建一个XML文件,来定义逐帧动画的属性和帧序列。 在XML文件中,我们可以指定逐帧动画的播放属性,例如重复次数、播放间隔等。然后,我们可以使用`<item>`标签来定义每一帧的图像资源。可以通过`<bitmap>`标签指定图像资源的来源,或者使用`<drawable>`标签指定图像资源的文件名。在`<item>`标签之间可以设置帧之间的过渡效果,例如渐变、平移等。 在代码中,我们可以使用`AnimationDrawable`类来加载并播放逐帧动画。我们可以通过`AnimationDrawable.addFrame()`方法添加每一帧的图像资源,通过`AnimationDrawable.setOneShot()`方法设置是否只播放一次,通过`AnimationDrawable.start()`方法开始播放,通过`AnimationDrawable.stop()`方法停止播放。 总结起来,Android Studio提供了逐帧动画的创建和播放的支持,通过准备一系列图像帧和定义动画属性,在代码中使用`AnimationDrawable`类加载并播放逐帧动画。这样,我们就可以为我们的Android应用程序添加生动有趣的动画效果。 ### 回答3: Android Studio是一个非常强大的集成开发环境,它提供了丰富的工具和功能帮助开发者进行Android应用的开发。其中的逐帧动画是一种常用的动画效果,它由一系列连续的静态图像组成,通过快速连续地播放这些图像,以达到动态的效果。 在Android Studio中创建逐帧动画非常简单。首先,我们需要准备好一组连续的静态图像,通常是位图或Drawable资源。然后,在res目录下创建一个名为"anim"的文件夹,并在该文件夹中创建一个XML文件,作为逐帧动画的描述文件。 在这个XML文件中,我们可以使用`<animation-list>`元素来定义逐帧动画。通过`<item>`元素,我们可以指定每一帧的图像资源,并设置持续时间。例如: ``` <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> <item android:drawable="@drawable/frame1" android:duration="100" /> <item android:drawable="@drawable/frame2" android:duration="100" /> <item android:drawable="@drawable/frame3" android:duration="100" /> ... </animation-list> ``` 在这个例子中,我们指定了三个帧,分别是frame1、frame2和frame3,并设置每一帧的持续时间为100毫秒。 完成逐帧动画的XML定义后,我们可以在布局文件或代码中使用`<ImageView>`元素来显示逐帧动画。通过设置`android:src`属性为我们创建的逐帧动画的XML文件,然后调用`start()`方法开始播放动画。 ``` <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/animation" /> ``` ```java ImageView imageView = findViewById(R.id.imageView); AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable(); animationDrawable.start(); ``` 这样,我们就可以在Android应用中展示逐帧动画了。可以通过调整每一帧的图像和持续时间,来实现各种不同的动画效果,丰富我们的应用界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值