Android动画

Android三种动画

  • View Animation(视觉动画)
  • Drawable Animation(帧动画)
  • Property Animation(属性动画)

1.View Animation(视觉动画)

视觉动画使用详解

视觉动画的作用对象是view,支持四种动画效果,分别是平移动画、缩放动画、旋转动画和透明度动画。

名称标签子类效果
平移动画< translate >TranslateAnimation移动View
缩放动画< scale >ScaleAnimation放大或缩小View
旋转动画< rotate >RotateAnimation旋转View
透明度动画< alpha >AlphaAnimation改变View的透明度
  • Animation属性详解:
xml属性java方法解释
android:durationandroid:duration动画持续时间,毫秒为单位
android:ShareInterpolatorsetInterpolator(Interpolator)设定插值器(指定的动画效果,譬如回弹等)
android:fillAftersetFillAfter(boolean)控件动画结束时是否保持动画最后的状态
android:fillBeforesetFillBefore(boolean)控件动画结束时是否还原到开始动画前的状态
android:repeatModesetRepeatMode(int)重复类型有两个值,reverse表示倒序回放,restart表示从头播放
android:startOffsetsetStartOffset(long)< span class=“Apple-tab-span” style=“white-space:pre”>< /span>调用start函数之后等待开始运行的时间,单位为毫秒
  • TranslateAnimation属性详解:
xml属性java方法解释
android:fromXDeltaTranslateAnimation(float fromXDelta, …)起始点X轴坐标,数值,百分比,百分比p,注 1
android:fromYDeltaTranslateAnimation(…, float fromYDelta, …)起始点Y轴从标,同上规律
android:toXDeltaTranslateAnimation(…, float toXDelta, …)结束点X轴坐标,同上规律
android:toYDeltaTranslateAnimation(…, float toYDelta)结束点Y轴坐标,同上规律
  • ScaleAnimation属性详解:
xml属性java方法解释
android:fromXScaleScaleAnimation(float fromX, …)初始X轴缩放比例,1.0表示无变化
android:toXScaleScaleAnimation(…, float toX, …)结束X轴缩放比例
android:fromYScaleScaleAnimation(…, float fromY, …)初始Y轴缩放比例
android:toYScaleScaleAnimation(…, float toY, …)结束Y轴缩放比例
android:pivotXScaleAnimation(…, float pivotX, …)缩放起点X轴坐标,数值,百分比,百分比p,注 1
android:pivotYScaleAnimation(…, float pivotY)缩放起点Y轴坐标,同上规律
  • RotateAnimation属性详解:
xml属性java方法解释
android:fromDegreesRotateAnimation(float fromDegrees, …)旋转开始角度,正代表顺时针度数,负代表逆时针度数
android:toDegreesRotateAnimation(…, float toDegrees, …)旋转结束角度,正代表顺时针度数,负代表逆时针度数
android:pivotXRotateAnimation(…, float pivotX, …)缩放起点X坐标,数值,百分比,百分比p,注 1
android:pivotYRotateAnimation(…, float pivotY)缩放起点Y坐标,同上规律
  • AlphaAnimation属性详解:
xml属性java方法解释
android:fromAlphaAlphaAnimation(float fromAlpha, …)动画开始的透明度(0.0到1.0,0.0是全透明,1.0是不透明)
android:toAlphaAlphaAnimation(…, float toAlpha)动画结束的透明度,同上
  • AnimationSet属性详解:

AnimationSet继承自Animation,是上面四种的组合容器管理类,没有自己特有的属性,他的属性继承自Animation,所以特别注意,当我们对set标签使用Animation的属性时会对该标签下的所有子控件都产生影响。譬如我们在set标签下加入duration=“1000”,子控件的duration属性会失效。

Animation类的方法解释
reset()重置Animation的初始化
cancel()取消Animation动画
start()开始Animation动画
setAnimationListener()给当前Animation设置动画监听
hasStarted()判断当前Animation是否开始
hasEnded()判断当前Animation是否结束
----------------------------------------------------------
startAnimation(Animation animation)< span class=“Apple-tab-span” style=“white-space:pre”>< /span>对当前View开始设置的Animation动画
clearAnimation()取消当View在执行的Animation动画
  • View动画Interpolator插值器详解

插值器定义了动画的变化,使一些基础的动画如(平移,缩放,旋转,透明)可以被加速,减速,重复等

java类xml描述
AccelerateDecelerateInterpolator@android:anim/accelerate_decelerate_interpolator动画始末速率较慢,中间加速
AccelerateInterpolator@android:anim/accelerate_interpolator动画开始速率较慢,之后慢慢加速
AnticipateInterpolator@android:anim/anticipate_interpolator开始的时候从后向前甩
AnticipateOvershootInterpolatorAnticipateOvershootInterpolator类似上面AnticipateInterpolator
BounceInterpolator@android:anim/bounce_interpolator动画结束时弹起
CycleInterpolator@android:anim/cycle_interpolator循环播放速率改变为正弦曲线
DecelerateInterpolator@android:anim/decelerate_interpolator动画开始快然后慢
LinearInterpolator@android:anim/linear_interpolator动画匀速改变
OvershootInterpolator@android:anim/overshoot_interpolator向前弹出一定值之后回到原来位置

使用如下

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

    <!--透明度动画标签-->
    <alpha
        android:duration="4000"
        android:fromAlpha="1.0"
        android:toAlpha="0.2" />
        
</set>
  • 插值器的自定义

使用步骤

1.在res目录下创建anim文件夹,然后再anim下创建animation resource file的xml文件:

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

    <!--透明度动画标签-->
    <alpha
        android:duration="4000"
        android:fromAlpha="1.0"
        android:toAlpha="0.2" />

    <!--旋转动画标签-->
    <rotate
        android:duration="4000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360" />

    <!--缩放动画标签-->
    <scale
        android:duration="4000"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.2"
        android:toYScale="0.2" />

    <!--平移动画标签-->
    <translate
        android:duration="4000"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="50%"
        android:toYDelta="50%" />

</set>

从上面的代码我们知道,View动画既可以是单个动画,也可以有一系列动画组成。
这是因为View动画的四种种类分别对应着Animation的四个子类(TranslateAnimation,ScaleAnimation,RotateAnimation,AlphaAnimation),除了以上四个子类它还有一个AnimationSet类,对应xml标签为,它是一个容器,可以包含若干个动画,并且内部也可以继续嵌套集合的。
我们在activity对TextView设置动画:

public class MainActivity extends AppCompatActivity {

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.view_anim);
                textView.clearAnimation();
                textView.startAnimation(animation);
            }
        });
    }
}

2.Drawable Animation(帧动画)

帧动画是顺序播放一组预先定义好的图片,不同于View动画,系统提供了另外一个类AnimationDrawable来使用帧动画。

<?xml version="1.0" encoding="utf-8"?>
<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/refresh1" android:duration="180"/>
    <item android:drawable="@drawable/refresh2" android:duration="180"/>
    ...
    <item android:drawable="@drawable/refresh25" android:duration="180"/>
</animation-list>
view = findViewById(R.id.view);
        view.setBackgroundResource(R.drawable.drawable_anim);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AnimationDrawable animationDrawable = (AnimationDrawable) view.getBackground();
                animationDrawable.start();
            }
        });

注意点:
< animation-list> 必须是根节点,包含一个或者多个< item>元素,属性有:
android:oneshot true代表只执行一次,false循环执行。
< item> 类似一帧的动画资源。

< item> animation-list的子项,包含属性如下:
android:drawable 一个frame的Drawable资源。
android:duration 一个frame显示多长时间。

3.Property Animation(属性动画)

属性动画参考


  1. 数值、百分数、百分数p,譬如50表示以当前View左上角坐标加50px为初始点、50%表示以当前View的左上角加上当前View宽高的50%做为初始点、50%p表示以当前View的左上角加上父控件宽高的50%做为初始点。 ↩︎ ↩︎ ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值