Android动画之视图动画

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>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值