Android动画-补间(Tween)动画

简介:

Android动画的两种方式,其中帧动画上篇文章已经讲了,这次主要讲解的就是补间动画,补间动画就是动画业务场景中常用的旋转,平移,缩放,和渐变效果,帧动画是通过轮播动画实现动画效果,补间动画通过在两个关键帧之间补充渐变的动画效果来实现的,相对而言补间动画的暂用的空间更小,补间动画有两种方式,一种是直接在代码中是实现,另外一种是在XML文件中定义,然后通过代码调用,如果以后有需要直接改xml文件就行不需要改代码。

布局文件

先来看下是实现的效果:

 

Layout中xml设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<RelativeLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     xmlns:tools= "http://schemas.android.com/tools"
     android:layout_width= "match_parent"
     android:layout_height= "match_parent"
     tools:context= "com.example.googletween.MainActivity"  >
 
     <LinearLayout
         android:id= "@+id/line"
         android:layout_width= "match_parent"
         android:layout_height= "wrap_content"
         android:orientation= "horizontal"  >
 
         <Button
             android:onClick= "alphaEvent"
             android:layout_width= "0dip"
             android:layout_height= "wrap_content"
             android:layout_weight= "1"
             android:text= "渐变"
             />
         
          <Button
             android:onClick= "roateEvent"
             android:layout_width= "0dip"
             android:layout_height= "wrap_content"
             android:layout_weight= "1"
             android:text= "旋转"
             />
          
           <Button
             android:onClick= "tranEvent"
             android:layout_width= "0dip"
             android:layout_height= "wrap_content"
             android:layout_weight= "1"
             android:text= "位移"
             />
           
            <Button
             android:onClick= "scaleEvent"
             android:layout_width= "0dip"
             android:layout_height= "wrap_content"
             android:layout_weight= "1"
             android:text= "缩放"
             />
            
               <Button
             android:onClick= "multiEvent"
             android:layout_width= "0dip"
             android:layout_height= "wrap_content"
             android:layout_weight= "1"
             
             android:text= "混合"
             />
     </LinearLayout>
 
     <ImageView
         android:id= "@+id/image_change"
         android:layout_width= "wrap_content"
         android:layout_below= "@id/line"
         android:layout_height= "wrap_content"
         android:layout_centerHorizontal= "true"
         android:layout_centerVertical= "true"
         android:src= "@drawable/ic_launcher"
         />
     
</RelativeLayout>

 动画效果

渐变透明度,初始化构造函数的时候两个数字最小透明度和最大透明度:

1
2
3
4
5
6
7
AlphaAnimation alphaAnimation= new  AlphaAnimation( 0 .1f, 1f);
     //设置动画时间
     alphaAnimation.setDuration( 3000 );
     //重复次数
     alphaAnimation.setRepeatCount( 1 );
     alphaAnimation.setRepeatMode(Animation.REVERSE);
     image.startAnimation(alphaAnimation);

  旋转效果,初始化的时候是旋转0度到360度:

1
2
3
RotateAnimation rotateAnimation= new  RotateAnimation(0f, 360f);
         rotateAnimation.setDuration( 2000 );
         image.startAnimation(rotateAnimation);

  位移效果,第一个参数fromXDelta ,第二个参数toXDelta:分别是动画起始、结束时X坐标,第三个参数fromYDelta ,第四个参数toYDelta:分别是动画起始、结束时Y坐标:

1
2
3
TranslateAnimation translateAnimation= new  TranslateAnimation(0f, 100f, 0f, 100f);
     translateAnimation.setDuration( 2000 );
     image.startAnimation(translateAnimation);

  缩放效果

1
2
3
ScaleAnimation scaleAnimation= new  ScaleAnimation( 0 .1f, 1f,  0 .1f, 1f);
     scaleAnimation.setDuration( 2000 );
     image.startAnimation(scaleAnimation);

  缩放的同时移动(最后两种效果混合):

1
2
3
4
5
6
7
8
AnimationSet  animationSet= new  AnimationSet( true );
         TranslateAnimation translateAnimation= new  TranslateAnimation(0f, 100f, 0f, 100f);
         ScaleAnimation scaleAnimation= new  ScaleAnimation( 0 .1f, 1f,  0 .1f, 1f);
 
         animationSet.addAnimation(translateAnimation);
         animationSet.addAnimation(scaleAnimation);
         animationSet.setDuration( 2000 );
         image.startAnimation(animationSet);

 第二种是在xml文件中定义,将代码中的属性值在xml中设置即可:

渐变xml

1
2
3
4
5
6
7
8
9
10
<?xml version= "1.0"  encoding= "utf-8" ?>
<alpha
     xmlns:android= "http://schemas.android.com/apk/res/android"
     android:fromAlpha= "0.1"
     android:toAlpha= "1.0"
     android:duration= "2000"
     android:repeatCount= "1"
     android:repeatMode= "reverse" >
 
</alpha>

  调用:

1
2
Animation alphaAnimation=AnimationUtils.loadAnimation( this , R.anim.alpha);
     image.startAnimation(alphaAnimation);

旋转xml:

1
2
3
4
5
6
7
8
9
<?xml version= "1.0"  encoding= "utf-8" ?>
<rotate
     xmlns:android= "http://schemas.android.com/apk/res/android"
     android:duration= "2000"
     android:fromDegrees= "0"
     android:toDegrees= "360" >
     
 
</rotate>

  调用:

1
2
Animation rotateAnimation=AnimationUtils.loadAnimation( this , R.anim.roate);
     image.startAnimation(rotateAnimation);

  缩放xml:

1
2
3
4
5
6
7
8
9
10
11
<?xml version= "1.0"  encoding= "utf-8" ?>
<scale
     xmlns:android= "http://schemas.android.com/apk/res/android"
     android:duration= "2000"
     android:fromXScale= "0"
     android:toXScale= "1"
     android:fromYScale= "0"
     android:toYScale= "1" >
     
 
</scale>

  调用:

 

1
2
Animation scaleAnimation=AnimationUtils.loadAnimation( this , R.anim.scale);
     image.startAnimation(scaleAnimation);

 

  位移xml:

1
2
3
4
5
6
7
8
9
10
11
<?xml version= "1.0"  encoding= "utf-8" ?>
<translate
     xmlns:android= "http://schemas.android.com/apk/res/android"
      android:duration= "2000"
      android:fromXDelta= "0"
      android:toXDelta= "100"
      android:fromYDelta= "0"
      android:toYDelta= "100" >
     
 
</translate>

  调用:

1
2
Animation translateAnimation=AnimationUtils.loadAnimation( this , R.anim.tran);
         image.startAnimation(translateAnimation);

组合xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?xml version= "1.0"  encoding= "utf-8" ?>
<set>
 
     <alpha
         xmlns:android= "http://schemas.android.com/apk/res/android"
         android:duration= "2000"
         android:fromAlpha= "0.1"
         android:repeatCount= "1"
         android:repeatMode= "reverse"
         android:toAlpha= "1.0"  >
     </alpha>
 
     <rotate
         xmlns:android= "http://schemas.android.com/apk/res/android"
         android:duration= "2000"
         android:fromDegrees= "0"
         android:toDegrees= "360"  >
     </rotate>
 
     <scale
         xmlns:android= "http://schemas.android.com/apk/res/android"
         android:duration= "2000"
         android:fromXScale= "0"
         android:fromYScale= "0"
         android:toXScale= "1"
         android:toYScale= "1"  >
     </scale>
 
     <translate
         xmlns:android= "http://schemas.android.com/apk/res/android"
         android:duration= "2000"
         android:fromXDelta= "0"
         android:fromYDelta= "0"
         android:toXDelta= "100"
         android:toYDelta= "100"  >
     </translate>
 
</set>

  调用:

 

1
2
Animation animationSet=AnimationUtils.loadAnimation( this , R.anim.set);
         image.startAnimation(animationSet);
本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4102689.html,如需转载请自行联系原作者
相关文章
|
4月前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
94 2
基于Android P,自定义Android开机动画的方法
|
2月前
|
Android开发 UED
Android 中加载 Gif 动画
【10月更文挑战第20天】加载 Gif 动画是 Android 开发中的一项重要技能。通过使用第三方库或自定义实现,可以方便地在应用中展示生动的 Gif 动画。在实际应用中,需要根据具体情况进行合理选择和优化,以确保用户体验和性能的平衡。可以通过不断的实践和探索,进一步掌握在 Android 中加载 Gif 动画的技巧和方法,为开发高质量的 Android 应用提供支持。
|
7月前
|
Java Android开发 开发者
Android10 修改开发者选项中动画缩放默认值
Android10 修改开发者选项中动画缩放默认值
222 0
|
7月前
|
XML Java Android开发
android的三种动画
android的三种动画
45 0
|
5月前
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
154 12
|
6月前
|
Android开发 UED
Android Item平移动画
【6月更文挑战第18天】
120 8
|
5月前
|
XML Android开发 UED
Android动画之共享元素动画简单实践
本文介绍Android共享元素动画, 实现两Activity间平滑过渡特定UI元素。通过设置`transitionName`属性和使用`ActivityOptions.makeSceneTransitionAnimation`启动目标Activity实现动画效果。可自定义过渡动画提升体验。
87 0
|
5月前
|
Android开发
android 动画 插值器和估值器
android 动画 插值器和估值器
|
7月前
|
数据库 Android开发
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画