欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android动画之视图动画

程序员文章站 2022-03-01 21:05:15
...

Android中的动画分类

1. 视图动画 

Tween动画 :平移动画、旋转动画、缩放动画、渐变动画

Frame动画 AnimationDrawable一般由多张图片按照一定的时间间隔显示

2. 属性动画

这篇重点写视图动画

视图动画可以用Java纯代码写,也可以使用xml调用。

使用Tweened AnimationsJava代码使用步骤

1. 创建一个AnimationSet对象

2. 根据需要创建相应的Animation对象(AlphaAnimation、RotateAnimation、ScaleAnimation、TranslateAnimation)

3. 设置Animation对象相应的数据duration, startoffset......

4. 使用addAnimation方法将Animation对象添加到AnimationSet对象当中

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

view.startAnimation(animation);

view.setAnimation(animation);

view.startNow();

 

取消动作:

animation.cancel(); //动作本身取消

animationset.cancel(); //动作集取消

(View控件)img.clearAnimation(); //控件取消附在其上的动作



在XML中设置动画效果步骤:

1.     在res文件夹下新建一个名为anim的文件夹

2.     创建xml文件,并首先加入set标签(set标签就相当于Java代码中的AnimationSet)

3.     在Set标签中加入alpha,scale,rotate,translate标签(相当于Java代码

               中的AlphaAnimation,ScaleAnimation,RotateAnimation,TranslateAnimation)

4.     在Java代码中使用AnimationUtils的loadAnimation方法来加载XML文件,并得到一个Animation对象

5.     使用控件的startAnimation()方法执行这个Animation对象

那么通用的属性:

  • android:duration:设置动画持续时间
  • android:fillAfter:如果fillAfter设为true,则动画执行后,控件将停留在动画结束的状态
  • android:fillBefore:如果fillBefore设为true,则动画执行后,控件将回到动画开始的状态
  • android:startOffset(long startOffset):设置动画执行之前等待的时间(单位:毫秒)
  • android:repeatCount(int repeatCount):设置动画重复的次数
  • android:interpolator:设置动画的变化速度,其值:

  android:interpolator="@android:anim/accelerate_decelerate_interpolator":先加速,后减速

 android:interpolator="@android:anim/accelerate_interpolator":加速

 android:interpolator="@android:anim/decelerate_interpolator":减速

 android:interpolator="@android:anim/cycle_Interpolator":动画循环播放特定次数,速率改变沿着正弦曲线

 android:interpolator="@android:anim/linear_Interpolator":匀速


alpha.xml

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

    <alpha
        android:duration="2000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" >
    </alpha>

</set>


 fromAlpha : 动画开始的透明度

toAlpha : 表示动画结束的透明度

duration : 便是动画的持续时间,单位为毫秒,2000毫秒表示2秒。

startOffset : 表示动画开始的延迟时间,点击开始1秒后开始执行,单位也是毫秒。

1.0表示完全不透明,0.0便是完全透明,两个都是浮点数。

rotate.xml

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

    <rotate
        android:duration="1000"
        android:fromDegrees="0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="+360" />

</set>

 fromDegrees动画开始的角度,toDegress动画结束的角度,正数为顺时针,负数为逆时针,pivotX,piovtY:旋转的中心坐标位置,设置的方式与缩放相似。


scale.xml

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

    <scale
        android:duration="2000"
        android:fillAfter="false"
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />

</set>

 fromXScale,fromXScale动画开始时x,y的缩放大小,toXScale,toXScale:动画结束的x,y缩放大小,1表示本身大小,数值越大,缩放比例越大,pivotX,piovtY:缩放的中心坐标位置,可以设置值与平移动画可以设置的类似:

50: 表示50个像素,是绝对值 

50%: 表示自身中心位置 

50%p :表示父元素的中心位置,p表示相对于父元素

translate.xml

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

    <translate
        android:duration="1000"
        android:fromXDelta="10"
        android:fromYDelta="10"
        android:toXDelta="100"
        android:toYDelta="100" />

</set>

  
 fromXDelta,fromYDelta表示动画开始时的x,y坐标,toXDelta,toYDelta动画结束的x,y坐标,这里需要注意的是他可以设置三种类型的值,比如我们设置50:

50: 表示50个像素,是绝对值 
50%: 表示自身大小一半,记住这里是可以设置%号的,他等于0.5,如果设置0.5表示绝对值0.5 
50%p :表示父元素大小的一半,p表示相对于父元素


其他:

Java中,时间使用毫秒单位来表示,因为计算机提供了毫秒精度的时间,1=1000毫秒

设置按钮居中:

在 LinearLayout 或者 FrameLayout布局文件中android:layout_gravity="center"

在RelativeLayout布局文件中:android:layout_centerInParent="true"


<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:duration="3000" android:fromAlpha="0.0" android:toAlpha="1.0" > </alpha></set>