Android中的动画效果

补间动画

  • 透明度动画
    AlphaAnimation animation = new AlphaAnimation(0,1);
    animation.setDuration(1000);
    view.startAnimation(animation);

  从0不显示到1全显示

  • 旋转动画
    RotateAnimation animation = new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f);
    animation.setDuration(1000);
    view.startAnimation(animation);
  • 位移动画
    TranslateAnimation animation = new TranslateAnimation(0,200,0,300);
    animation.setDuration(1000);
    view.startAnimation(animation);

  从原来的位置X轴移动200,Y轴移动300

  • 缩放动画
    ScaleAnimation animation = new ScaleAnimation(0,2,0,2);
    animation.setDuration(1000);
    view.startAnimation(animation);
  • 动画集合(AnimationSet)
    AnimationSet as = new AnimationSet(true);//是否共享插补器
    as.setDuration(1000);
    AlphaAnimation aa = new AlphaAnimation(0, 1);
    aa.setDuration(1000);
    as.addAnimation(aa);
    TranslateAnimation ta = new TranslateAnimation(0, 100, 0, 200);
    ta.setDuration(1000);
    as.addAnimation(ta);
    view.startAnimation(as);

属性动画

  由于Android3.0之前已有的补间动画改变的只是显示,并不能响应事件。所以在3.0之后提出了一个新的动画框架Animator。

  • ObjectAnimator
    ObjectAnimator animator = ObjectAnimator.ofFloat(btnTest,"translationY",300);
    animator.setDuration(3000);
    animator.start();

  ObjectAnimator 操作的属性必须有get,set方法。如果没有,底层是通过反射改变的值,如果没有get,set就会无法出现想要的效果。所以就会用到包装类。

      static  class WrapperButton{
          private View mTargetView;
          private int width;
          public WrapperButton(View mTargetView){
              this.mTargetView =mTargetView;
          }

          public int getWidth() {
              return mTargetView.getLayoutParams().width;
          }

          public void setWidth(int width) {
              mTargetView.getLayoutParams().width = width;
              mTargetView.requestLayout();
          }
      }
  • ValueAnimator(ObjectAnimator的父类)

    ```
    PropertyValuesHolder holder1 = PropertyValuesHolder.ofFloat("scaleX", 1f, 0, 1f);
            PropertyValuesHolder holder2 = PropertyValuesHolder.ofFloat("scaleY", 1f, 0, 1f);
            PropertyValuesHolder holder3 = PropertyValuesHolder.ofFloat("translationX", 300f);
            ObjectAnimator.ofPropertyValuesHolder(btnTest,holder1,holder2,holder3).setDuration(300).start();
    ```
    
    • PropertyValuesHolder
    ValueAnimator animator = ValueAnimator.ofFloat(0,100);
            animator.setTarget(btnTest);
            animator.setDuration(3000);
            animator.start();
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    Float value = (Float) animation.getAnimatedValue();
                    btnTest.setTranslationX(value);
                }
            });

帧动画

Frame动画,即顺序播放事先做好的图像,跟放胶片电影类似。

开发步骤:

  1. 把准备好的图片放进项目res/ drawable下。
  2. 在项目的drawable文件夹下面定义动画XML文件,文件名称可以自定义。当然也可以采用编码方式定义动画效果(使用AnimationDrawable类)。
  3. 为View控件绑定动画效果。调用代表动画的AnimationDrawable的start()方法开始动画。
    实例:
    android:oneshot=”false”表示重复播放。

framelist.xml

“1.0”encoding=”utf-8”?>

http://schemas.android.com/apk/res/android

android:oneshot=”false”>

“@drawable/zzlx1”android:duration=”200”/>

“@drawable/zzlx2”android:duration=”200”/>

“@drawable/zzlx3”android:duration=”200”/>

“@drawable/zzlx4”android:duration=”200”/>

“@drawable/zzlx5”android:duration=”200”/>

“@drawable/zzlx6”android:duration=”200”/>

“@drawable/zzlx7”android:duration=”200”/>

“@drawable/zzlx8”android:duration=”200”/>

代码分析:

上面的XML就定义了一个Frame动画,其包含8帧动画,8帧动画中分别应用了drawable中的8张图片:zzlx1、zzlx2、zzlx3….,每帧动画持续200毫秒。android:oneshot属性如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。

在Xml中定义好帧动画之后就可以将其设置到View上了,请看下面代码:

//第一步将animation-list设置为ImageView的背景

imgShow.setBackgroundResource(R.drawable.framelist);

//第二步获取ImagView的背景并将其转换成AnimationDrawable

AnimationDrawableanimationDrawable=(AnimationDrawable)imgShow.getBackground();

//第三步开始播放动画

animationDrawable.start();

提示:

有一点需要强调的是:启动Frame动画的代码animationDrawable.start();不能应用在OnCreate()方法中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定。在OnCreate()中启动动画,只能看到第一张图片。

帧动画内容参考博客:Android开发之动画效果浅析(一)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值