Android动画--视图动画

Android动画–视图动画

根据《Android群英传》总结

1.AlphaAnimation–透明度动画

AlphaAnimation aa = new AlphaAnimation(0,1);
aa.setDuration(2000);
view.startAnimation(aa);

AlphaAnimation 的参数有两个:

AlphaAnimation(float fromAlpha, float toAlpha)

fromAlpha: 起始的Alpha值
toAlpha:结束的Alpha
数值在0~1之间

2.RoateAnimation–旋转动画

RotateAnimation(float fromDegrees, float toDegrees, 
    float pivotX, float pivotY)
RotateAnimation rotateAnimation = new RotateAnimation(
    0,360,100,100);
rotateAnimation.setDuration(2000);
view.startAnimation(rotateAnimation);

参数分别为旋转的起始角度和旋转中心点的坐标。我们也可以通过设置旋转参考系对动画进行控制:

RotateAnimation(float fromDegrees, float toDegrees, 
    int pivotXType, float pivotXValue,int pivotYType, 
    float pivotYValue) 

如下所示,设置旋转参考系为自身中心点:

RotateAnimation ra = new RotateAnimation(0,360,
        RotateAnimation.RELATIVE_TO_SELF,0.5f,
        RotateAnimation.RELATIVE_TO_PARENT,0.5f);
ra.setDuration(2000);
btn_Roate.startAnimation(ra);

3.TranslateAnimation–位移动画

TranslateAnimation ta = new TranslateAnimation(0,200,
        0,200);
ta.setDuration(2000);
view.startAnimation(ta);

参数分别为起始点的X坐标和Y坐标。

4.ScaleAnimation–缩放动画

ScaleAnimation sa = new ScaleAnimation(0,2,0,2);
sa.setDuration(2000);
view.startAnimation(sa);

同样可以通过设置参考系设置缩放动画的缩放位置。
参数分别为XY坐标的缩放比例。

5.AnimationSet–动画集合

通过AnimationSet可以将多个动画组合起来使用。

AnimationSet as = new AnimationSet(true);
as.setDuration(2000);

AlphaAnimation alphaAnimationa = new AlphaAnimation(0,1);
alphaAnimationa.setDuration(2000);
as.addAnimation(alphaAnimationa);

RotateAnimation rotateAnimation = new RotateAnimation(0,
        360,
        RotateAnimation.RELATIVE_TO_SELF,0.5f,
        RotateAnimation.RELATIVE_TO_SELF,0.5f);
rotateAnimation.setDuration(2000);
as.addAnimation(rotateAnimation);
view.startAnimation(as);

6.通过Xml设置动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator">

    <scale
        android:fromXScale="1.0"
        android:toXScale="0.01"
        android:fromYScale="1.0"
        android:toYScale="0.01"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="true"
        android:duration="2000"/>

    <alpha android:fromAlpha="0"
        android:toAlpha="1"
        android:duration="2000"/>

    <rotate android:fromDegrees="0"
        android:toDegrees="200"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="2000"/>

    <translate android:fromXDelta="0"
        android:toXDelta="100"
        android:fromYDelta="0"
        android:toYDelta="100"
        android:duration="2000"/>
</set>

在代码中使用的时候,通过AnimationUtil进行加载:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim);
view.startAnimation(animation);

7.设置动画监听器

animation.setAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {

    }

    @Override
    public void onAnimationEnd(Animation animation) {

    }

    @Override
    public void onAnimationRepeat(Animation animation) {

    }
});

通过该监听器可以获取到动画的开始、结束和重复事件,并针对其做出不同的处理。

8.视图动画优缺点分析

通过运行以上代码可以发现,这些动画只是在视觉上产生动画效果,不具备交互性,即动画运行过程中其响应事件的位置还是在动画之前的位置,且动画结束后产生动画的view会回到之前的状态(可以通过animation.setFillAfter(true)保留结束时的状态,但是响应位置还是在动画之前的位置),但是效率比较高且使用方便。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值