View动画、帧动画、属性动画

转载请注明出处,谢谢

View动画:

1、View可以使用代码来设置也可以使用xml文件来设置,在xml文件里面对应的标签为:
<translate>…………</translate>:用于平移
<scale>…………</scale>:用于缩放
<rotate>…………</rotate>:用于旋转
<alpha>…………</alpha>:用于透明度的变化
上代码:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:shareInterpolator="true">

    <translate
        android:fromXDelta="0"
        android:toXDelta="100"
        android:fromYDelta="0"
        android:toYDelta="100"
        android:duration="100"
        />
    <rotate
        android:fromDegrees="0"
        android:toDegrees="270"
        android:duration="300"
        android:pivotX="0"
        android:pivotY="0"
        />
    <alpha
        android:fromAlpha="0"
        android:toAlpha="1"
        />

    <scale
        android:fromXScale="20"
        android:toXScale="100"
        android:fromYScale="40"
        android:toYScale="80"
        android:pivotY="20"
        android:pivotX="40"
        />
</set>


代码控制分别为Animation的4个子类:TranslateAnimation、ScaleAnimation、RotateAnimation、AlphaAnimation
代码也可以实现动画:
mAlphaAnimation = new AlphaAnimation(0, 1);
        mAlphaAnimation.setDuration(200);
        mMenu.startAnimation(mAlphaAnimation);<span>	</span>



2、代码中获取xml中的View动画
动画对象=AnimationUtils.load(上下文,R.anim.动画文件的名字);
执行动画的对象.startAnimation(动画对象);
上代码:
 mMenu = (SlidingMenu) findViewById(R.id.id_menu);

        mAnimation = AnimationUtils.loadAnimation(this, R.anim.animation_set);
        mMenu.startAnimation(mAnimation);
        mAnimation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });


3、监听View动画
View动画的监听使用setAnimationListener
4、View动画的特殊使用场景
在ViewGroup中控制元素的进出效果,在控件的属性中加上layoutAnimation就可以,也可以在代码中设置
listView.setLayoutAnimation(new LayoutAnimationController(AnimationUtils.loadAnimation(上下文,R.anim.anim_item)));
当然还有Acticity默认的切换效果:使用overridePendingTransition(Acticity被打开的的动画的ID,Acticity被关闭下的动画的id);
这个方法必须在startActivity或者finish的后面,否则起不到效果。

帧动画(AnimationDrawable)

xml中的代码格式:<animation_list……>
<item……/>
</animation_list>
上代码:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
<!--oneshot:代表是否执行一次-->
    <item android:drawable="@drawable/ic"
        android:duration="500"
        />
    <item android:drawable="@drawable/ic_launcher"
          android:duration="500"
        />
    <item android:drawable="@drawable/ic_action_github"
          android:duration="500"
        />
    <item android:drawable="@drawable/img_1"
          android:duration="500"
        />

</animation-list>


获取xml中的动画:
执行动画的对象.setBackgroundResource(R.drawable.动画的文件名);
帧动画的对象.执行动画的对象.getBackground();
帧动画对象.start();
上代码:
mMenu.setBackgroundResource(R.drawable.frame_animation);
        mBackground = (AnimationDrawable)mMenu.getBackground();
        mBackground.start();


帧动画有个缺点就是比较容易导致OOM。

属性动画

ValueAnimator、ObjectAnimator、AnimatorSet……

 mAnimatorSet = new AnimatorSet();
        mAnimatorSet.playTogether(ObjectAnimator.ofFloat(mMenu,"rotationX",0,360),
                                    ObjectAnimator.ofFloat(mMenu,"rotationY",0,180),
                                    ObjectAnimator.ofFloat(mMenu,"ratation",0,-90),
                                    ObjectAnimator.ofFloat(mMenu,"scaleX",1,1.5f),
                                    ObjectAnimator.ofFloat(mMenu,"scaleY",1,0.5f),
                                    ObjectAnimator.ofFloat(mMenu,"alpha",1,0.25f,1));
        mAnimatorSet.setDuration(5*1000).start();

使用方法:ObjectAniamtor.ofFloat(执行动画的对象,“动画的属性”,-myObject.getHeight()).start();
也可以使用xml中的属性动画
调用xml中的属性动画:set=(AnimatorInflater.loadAnimator(上下文,动画的id));
set.setTarget(mButton);
set.start();


监听属性动画:
 ObjectAnimator.ofFloat(mMenu, "rotationX", 0, 360).addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                
            }
        });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值