转载请注明出处,谢谢
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) {
}
});