Android动画

本文详细介绍了Android中的视图动画(View Animation),包括透明度、尺寸缩放、移动及旋转动画的具体实现方法,以及帧动画(Drawable Animation)的使用技巧。文中还提供了实例代码帮助理解。

android中提供了三种动画:

1、  Property Animation(属性动画)----Android 3.0 (API level 11)引进

2、  View Animation (视图动画)

3、  Drawable Animation (帧动画)

一、先看看View Animation (视图动画):

其中分为四种动画效果:

AlphaAnimation:透明度渐变动画(淡入淡出效果)

ScaleAnimation:渐变尺寸缩放动画(缩放效果)

TranslateAnimation:移动动画(移动效果)

RotateAnimation:旋转动画(旋转效果)

四种动画效果的创建方法:

(1)AlphaAnimation:透明度渐变动画(淡入淡出效果)

    Animation alpha = new AlphaAnimation(float fraomAlpha, float toAlpha);

    第一个参数:动画开始时的透明度

    第一个参数:动画结束时的透明度

    两个参数的取值范围[0, 1],从完全透明到完全不透明。

(2)ScaleAnimation:渐变尺寸缩放动画(缩放效果)

    Animation scaleA = new ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue);

    第一个参数:动画起始时X坐标上的伸缩比例

    第二个参数:动画起结束X坐标上的伸缩比例

    第三个参数:动画起始时Y坐标上的伸缩比例

    第四个参数:动画结束时Y坐标上的伸缩比例

    第五个参数:动画在X轴相对于物体的位置类型

    第六个参数:动画相对于物体X坐标的位置

    第七个参数:动画在Y轴相对于物体的位置类型

    第八个参数:动画相对于物体Y坐标的位置

  其中位置类型分为以下三种:

Animation.ABSOLUTE: 相对位置是屏幕左上角,绝对位置;

Animation.RELATIVE_TO_SELF: 相对位置是自身View,取值为0时,表示相对于是自身左上角,取值为1是相对于自身的右上角;

Animation.RELATIVE_TO_PARENT:相对于父类View 的位置。

 

(3)TranslateAnimation移动动画

Animation translate = new TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta);

第一个参数:动画起始时X轴上的位置

第二个参数:动画结束时X轴上的位置

第三个参数:动画起始时Y轴上的位置

第四个参数:动画结束时Y轴上的位置

(4)RotateAnimation 旋转动画

Animation rotate = new RotateAnimation(float fromDegress, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue);

第一个参数:动画起始时的旋转角度

第二个参数:动画旋转到的角度

第三个参数:动画在X轴相对于物件位置类型

第四个参数:动画相对于物件的X坐标的开始位置

第五个参数:动画在Y轴相对于物件位置类型

第六个参数:动画相对于物件的Y坐标的开始位置

 

如何使用:

1、  创建一个AnimationSet对象

2、  根据需要创建相应的Animation对象

3、  根据软件动画的需求,为animation对象设置相应数据

4、  animation对象添加到animationSet

5、  使用控件对象开始执行AnimationSet

例如:

AnimationSet as = new AnimationSet(false);

Animation scaleA = new ScaleAnimation(0%, 50%, 1, 1, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT, 0);

scaleA.setFillAfter(true);

// 参数为true时,动画执行后,控件停留在结束状态,

// 注意,setFillAfter是设置在AnimationSet上的。

as.setFillAfter(true); 

scaleA.setDuration(2000);

as.addAnimation(scaleA);

               

myImageView.startAnimation(as);

 

还有一些通用方法:

setDuration(long durationMills); // 设置动画持续时间(单位:毫秒)

setFillAfter(boolean fillAfter); // 若为true,动画执行后,控件停留在结束状态

setFillBefore(boolean fillBefore);// 若为true,动画执行后,控件停留在执行前状态

setStartOffSet(long startOffset);// 设置动画执行前的等待时间

setRepeatCount(int repeatCount); // 设置动画重复执行次数

当然,还可以定义XML文件,如:

<set xmlns:android="http://schemas.android.com/apk/res/android" >

 

    <set android:shareInterpolator="false"

        android:fillAfter="true" >

        <scale

            android:duration="1700"

            android:fillAfter="false"

            android:fromXScale="1.0"

            android:fromYScale="1.0"

            android:interpolator="@android:anim/accelerate_decelerate_interpolator"

            android:pivotX="20%"

            android:pivotY="20%"

            android:toXScale="1.4"

            android:toYScale="1.0" />

       

       

        <set android:interpolator="@android:anim/decelerate_interpolator" >

            <scale

                android:duration="1400"

                android:fillBefore="false"

                android:fromXScale="1.4"

                android:fromYScale="0.6"

                android:pivotX="50%"

                android:pivotY="50%"

                android:startOffset="700"

                android:toXScale="0.0"

                android:toYScale="0.0" />

 

            <rotate

                android:duration="1400"

                android:fromDegrees="0"

                android:pivotX="50%"

                android:pivotY="50%"

                android:startOffset="700"

                android:toDegrees="-45"

                android:toYScale="0.0" />

        </set>

       

        <translate

            android:duration="1400"

            android:fromXDelta="0%p"

            android:toXDelta="30%p"

            />

    </set>

 

</set>

在代码中调用,如下:

myImageView.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.hyperspace_jump));

 

二、Drawable Animation (帧动画)

先看一个实例:

引用网上的:http://www.open-open.com/lib/view/open1344504946405.html

第一步:先上图片素材,以下素材放到res/drawable目录下:

帧动画可以很简单的实现上面的效果。

绘图动画会让你依次的加载一系列的绘图资源来创建一个动画。这种动画是一种传统动画,它是用不同的图片序列来创建并依次播放的,看上去像放电影。AnimationDrawable类是绘图动画的基类。

你能够使用AnimationDrawable类的API在代码中定义动画的帧,但是,用一个单独的定义了组成动画帧的列表的XML来完成动画会更加简单。这种类型动画的XML文件要放在你的Android工程的res/drawable/目录中。这种情况下,指令是动画的播放顺序和每一帧动画的播放时间。
这个动画XML文件是由一个<animation-list>根元素和一系列的定义每一帧的<item>子元素组成。<item>元素定义了每一帧的绘图资源和播放时长。以下是绘图动画的一个示例XML文件:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

    android:oneshot="true">

    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />

    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />

    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />

</animation-list>

这个动画只有三个帧。通过把第一帧动画的android:oneshot属性设置为true,让动画播放一次,然后在最后一帧停止。如果它被设置为false,那么动画将会循环播放。使用这个保存在工程的res/drawable/目录中的rocket_thrust.xml文件,能够把一个背景图片添加到一个View对象上,然后播放动画。下面示例的Activity动画中添加了一个ImageView对象,并且在屏幕被触摸时动画开始播放:

AnimationDrawable rocketAnimation;

public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);

  rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

  rocketAnimation = (AnimationDrawable) rocketImage.getBackground();

}

public boolean onTouchEvent(MotionEvent event) {

  if (event.getAction() == MotionEvent.ACTION_DOWN) {

    rocketAnimation.start();

    return true;

  }

  return super.onTouchEvent(event);

}

l   注意,在Activity的onCreate()方法执行期间,不能调用AnimationDrawable对象上的start()方法,这是至关重要的,因为AnimationDrawable对象在这时还没有跟窗口绑定此处自己测试了一下,在onCreate中调用start方法是可以的。)如果要立即播放动画,不需要交互,你可以在Activity的onWindowFocusChanged()回调方法中调用star()方法,onWindowFocusChanged()方法会在窗口获取焦点时被Android系统调用。

三、Property Animation(属性动画)----还没弄懂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值