一起学Android之Animation

移动开发 作者: 2024-08-24 14:45:01
本文以一个简单的小例子,简述在Android开发中,动画的简单应用,仅供学习分享使用。
  • 帧动画:将图像资源按顺序一帧一帧的播放出来,形成动画()。
  • 补间动画:又叫视图动画,是比较旧的系统,只能用于视图组件,相对比较容易设置和提供能力满足程序的需要。
  • 属性动画:在android 3.0(api等级11)中引入的属性动画系统,允许您对任何对象的属性进行动画处理,包括未呈现到屏幕上的属性。该系统是可扩展的,并允许自定义动画类型的属性。
  • AnimationDrawable: 用于创建逐帧动画的对象,由一系列可拖动对象,可用作视图对象的背景
  • isRunning() 是否正在运行
  • stop() 停止动画
  • start() 开始运行
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <animation-list xmlns:android="http://schemas.android.com/apk/res/android">
 3     item android:drawable="@drawable/n0" android:duration="300"></item 4     ="@drawable/n1" 5     ="@drawable/n2" 6     ="@drawable/n3" 7     ="@drawable/n4" 8     ="@drawable/n5" 9     ="@drawable/n6"10     ="@drawable/n7"11     ="@drawable/n8"12     ="@drawable/n9"13 </animation-list>
private AnimationDrawable drawable;
 2 
 3     @Override
protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.activity_drawable);
 7         ImageView imageView= (ImageView) this.findViewById(R.id.ivLetter);
 8         drawable= (AnimationDrawable) imageView.getBackground();
 9         drawable.start();
10     }
11 
12 13     public boolean onTouchEvent(MotionEvent event) {
14         if(event.getAction()==MotionEvent.ACTION_DOWN){
15             if(drawable.isRunning()) {
16                 drawable.stop();
17             }else{
18                 drawable.start();
19             }
20         }
21         return .onTouchEvent(event);
22     }
  • TranslateAnimation 平移动画 控制对象位置的动画。
  • RotateAnimation 旋转动画 控制对象旋转的动画。这个旋转需要放置在xy平面上。您可以指定中心要使用的点,其中(0,0)是左上角。如果未指定,则(0,0)为默认旋转点。
  • ScaleAnimation 缩放动画 控制对象的比例尺的动画。您可以指定点用于缩放中心。
  • AlphaAnimation 透明度动画 控制对象的alpha级的动画,通过更改透明度属性,对于对象的淡入淡出,这是一个很有用的方法。
  • AnimationSet 动画集合 上述动画可以组合使用。
  • setFillAfter(true); 设置动画结束后的填充
  • setDuration(2000); 动画周期
  • setRepeatCount(2); 重复次数
  • setRepeatMode(Animation.REVERSE); 重复模式
 1   /**
     * 平移
     * @param v
 4      */
protected   transfer_click(View v){
 6 
 7         //参数是平移的起始坐标和结束坐标(起始X轴位置,结束X轴位置,起始Y轴位置,结束Y轴位置)的改变量。
 8         TranslateAnimation trans=new TranslateAnimation(0.0f,300f,0.0f,300f);
 9         fromXType 动画平移改变量的类型
10         Animation.RELATIVE_TO_SELF,0 表示控件现在的坐标+0*控件本身的宽度或高度
11         12         Animation.RELATIVE_TO_PARENT 相对于父控件,计算方式和Animation.RELATIVE_TO_SELF一样
13         fromXValue 起始坐标值的改变量,如果类型是ABSOLUTE,则此值为绝对数字,否则则表示百分比(0-1)之间。
14         TranslateAnimation trans=new TranslateAnimation(Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_SELF,1,1);
15         trans.setDuration(2000);设置周期
16         trans.setFillAfter(true);当结束时保持结束位置
17         trans.setRepeatCount(2);设置重复次数
18         trans.setRepeatMode(Animation.REVERSE);重复模式
19         ivTaichi.startAnimation(trans);启动
21 
22     23      * 旋转
24 25      26      rotate_click(View v){
27         参数是旋转的起始偏移量(度数),结束度数,旋转中心点(相对x轴 位置和y轴位置)。
28         RotateAnimation rotate=new RotateAnimation(0.0f,90.f,100.0f,100.0f);
29         RotateAnimation rotate =new RotateAnimation(0.0f,360.0f,0.5f,0.5f30         rotate.setFillAfter(true31         rotate.setDuration(200032         rotate.setRepeatCount(233         rotate.setRepeatMode(Animation.REVERSE);
34         ivTaichi.startAnimation(rotate);35 36 
37     38      * 缩放
39 40      41      scale_click(View v){
42         fromX toX 动画起始和结束时的X轴水平缩放因子
43         fromY toY 动画起始和结束时的Y轴水平缩放因子
44         ScaleAnimation scale=new ScaleAnimation(0.5f,1.5f,1.5f45         scale.setFillAfter(46         scale.setDuration(200047         scale.setRepeatCount(248         scale.setRepeatMode(Animation.REVERSE);
49         ivTaichi.startAnimation(scale);50 51 
52     53      * 透明度动画
54 55      56      alpha_click(View v){
57         fromAlpha toAlpha 动画起始和结束时的透明度。范围(0,1)
58         AlphaAnimation alpha=new AlphaAnimation(0,1)">59         alpha.setFillAfter(60         alpha.setDuration(200061         alpha.setRepeatCount(262         alpha.setRepeatMode(Animation.REVERSE);
63         ivTaichi.startAnimation(alpha);64 65 
66     67      * 集合动画
68 69      70      set_click(View v){
71         AnimationSet set=new AnimationSet(72         TranslateAnimation animation1=new TranslateAnimation(0.0f,300.0f,300.0f);
73         RotateAnimation animation2 =74         ScaleAnimation animation3=new ScaleAnimation(0.0f,1.0f,1.0f75         AlphaAnimation animation4=76         set.addAnimation(animation1);
77         set.addAnimation(animation2);
78         set.addAnimation(animation3);
79         set.addAnimation(animation4);
80         set.setFillAfter(81         set.setDuration(200082         set.setRepeatCount(283         set.setRepeatMode(Animation.REVERSE);
84         ivTaichi.startAnimation(set);85     }
  • ObjectAnimator 该ValueAnimator的子类提供了对目标对象上的动画属性的支持。该类的构造函数使用参数来定义将被动画化的目标对象以及将被动画化的属性的名称。
  • setDuration(2000); 动画周期
  • setRepeatCount(2); 重复次数
  • setRepeatMode(Animation.REVERSE); 重复方式
  • start(); 启动
 6         target 属性动画的目标控件
propertyName 产生动画的属性,所有的属性必须拥有set,get方法
values 属性动画的范围集合
 9         ObjectAnimator objectAnimator =ObjectAnimator.ofFloat(ivTaichi,"translationX",200,-200,010         objectAnimator.setDuration(200011         objectAnimator.setRepeatCount(2        objectAnimator.setRepeatMode(Animation.REVERSE);
        objectAnimator.start();
14 15 
16     17 19      20     21         ObjectAnimator objectAnimator =ObjectAnimator.ofFloat(ivTaichi,"rotationX",18022         objectAnimator.setDuration(200023         objectAnimator.setRepeatCount(225 26 27 
28     29 30 31      32     33         ObjectAnimator objectAnimator =ObjectAnimator.ofFloat(ivTaichi,"scaleX",1)">34         objectAnimator.setDuration(200035         objectAnimator.setRepeatCount(236 37 39 
40     41      * 透明度
42 43      44     45         ObjectAnimator objectAnimator =ObjectAnimator.ofFloat(ivTaichi,"alpha",1)">46         objectAnimator.setDuration(200047         objectAnimator.setRepeatCount(249 57         AnimatorSet set=new AnimatorSet();
58         List<Animator> list=new ArrayList<Animator>() ;
59         ObjectAnimator objectAnimator1 =ObjectAnimator.ofFloat(ivTaichi,20060         ObjectAnimator objectAnimator2 =ObjectAnimator.ofFloat(ivTaichi,1)">61         ObjectAnimator objectAnimator3 =ObjectAnimator.ofFloat(ivTaichi,1)">62         ObjectAnimator objectAnimator4 =ObjectAnimator.ofFloat(ivTaichi,1)">63         list.add(objectAnimator1);
        list.add(objectAnimator2);
65         list.add(objectAnimator3);
66         list.add(objectAnimator4);
67         播放一序列的动画对象
        set.playSequentially(list);
69         //
70         set.start();
71      }
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_67871.html