Android动画详解
2015-09-24 19:09
519 查看
领卓教育培训第七十二天
AlphaAnimation表示透明,传入的第一个参数表示开始透明度,第二个表示结束透明度。
TranslateAnimation表示位移,前两个参数表示位移的开始和结束位置X坐标,后两个表示位移的开始和结束位置Y坐标。
RotateAnimation表示旋转,第一个参数表示旋转开始角度,第二个表示旋转结束角度,后两个表示旋转中心点的坐标。
ScaleAnimation表示放缩,前两个参数表示X轴开始和结束放缩的比例,后两个参数表示Y轴开始和结束放缩的比例。
②然后设置动画的一些参数,持续时间,重复次数等。
③最后调用start()方法,启动动画
注意:
如果想要实现多种动画效果的结合,就要使用AnimationSet来实现。
比如,实现一个旋转动画:
②然后调用AnimationUtils类的loadAnimation()静态方法返回一个Animation的对象,最后调用start()方法即可
这样即可实现一个旋转动画,其中的第二个参数就是对view设置的动画效果。
比如实现一个旋转动画
②首先调用AnimatorInflater类的loadAnimator()静态方法返回一个Animator对象,然后调用setTarget()方法设置要设置该动画效果的View,最后调用start()方法,启动动画。
过渡的动画效果的分类:
1. LayoutTransition.APPEARING 当一个View在ViewGroup中出现时,对此View设置的动画
2. LayoutTransition.CHANGE_APPEARING 当一个View在ViewGroup中出现时,对此View对其他View位置造成影响,对其他View设置的动画
3. LayoutTransition.DISAPPEARING 当一个View在ViewGroup中消失时,对此View设置的动画
4. LayoutTransition.CHANGE_DISAPPEARING 当一个View在ViewGroup中消失时,对此View对其他View位置造成影响,对其他View设置的动画
同样的,我们自定义一个动画效果,用于对此View的添加效果:
最后是主活动中的代码:
实现效果:
View Animation
View Animation比较简单,只能支持简单的缩放、平移、旋转、透明度基本的动画,且有一定的局限性。在代码中实现
①首先得到你想要实现动画效果的实例:[code]AlphaAnimation animation1=new AlphaAnimation(0.0f,1.0f); TranslateAnimation animation2=new TranslateAnimation(-imageView.getMeasuredWidth(),0,0,0); RotateAnimation animation3=new RotateAnimation(0,360,imageView.getMeasuredWidth(),imageView.getMeasuredHeight()); ScaleAnimation animation4=new ScaleAnimation(1,1.5f,1,1.5f);
AlphaAnimation表示透明,传入的第一个参数表示开始透明度,第二个表示结束透明度。
TranslateAnimation表示位移,前两个参数表示位移的开始和结束位置X坐标,后两个表示位移的开始和结束位置Y坐标。
RotateAnimation表示旋转,第一个参数表示旋转开始角度,第二个表示旋转结束角度,后两个表示旋转中心点的坐标。
ScaleAnimation表示放缩,前两个参数表示X轴开始和结束放缩的比例,后两个参数表示Y轴开始和结束放缩的比例。
②然后设置动画的一些参数,持续时间,重复次数等。
[code]animation.setDuration(5000);
③最后调用start()方法,启动动画
[code]imageView.startAnimation(animation)
注意:
如果想要实现多种动画效果的结合,就要使用AnimationSet来实现。
[code]AnimationSet animationSet=new AnimationSet(false);//得到AnimationSet实例 AlphaAnimation animation1=new AlphaAnimation(0.0f,1.0f); TranslateAnimation animation2=new TranslateAnimation(-imageView.getMeasuredWidth(),0,0,0); RotateAnimation animation3=new RotateAnimation(0,360,imageView.getMeasuredWidth(),imageView.getMeasuredHeight()); ScaleAnimation animation4=new ScaleAnimation(1,1.5f,1,1.5f); animationSet.addAnimation(animation1);//加入各种动画效果 animationSet.addAnimation(animation2); animationSet.addAnimation(animation3); animationSet.addAnimation(animation4); animationSet.setDuration(5000);//设置动画持续时间 imageView.startAnimation(animationSet);//开始动画
在XML文件中实现
①首先在res文件夹下新建anim文件夹,然后在其新建xml比如,实现一个旋转动画:
[code]<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/bounce_interpolator"> <rotate android:duration="5000" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360"></rotate> </set>
②然后调用AnimationUtils类的loadAnimation()静态方法返回一个Animation的对象,最后调用start()方法即可
[code]Animation animation= AnimationUtils.loadAnimation(getApplicationContext(),R.anim.animation_rotate); imageView.startAnimation(animation);
Property Animation(属性动画)
Property Animation就是通过动画的方式改变对象的属性。它有两个执行类ObjectAnimator和ValueAnimator,下面就对ObjectAnimator做一些简单的了解。在代码中实现
ObjectAnimator的用法非常简单,比如实现一个简单的旋转动画[code]ObjectAnimator.ofFloat(imageView,"rotation",0f,360f) .setDuration(3000) .start();
这样即可实现一个旋转动画,其中的第二个参数就是对view设置的动画效果。
在XML中实现
①首先在res文件下新建一个animator文件,然后新建比如实现一个旋转动画
[code]<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:duration="3000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360"></objectAnimator> </set>
②首先调用AnimatorInflater类的loadAnimator()静态方法返回一个Animator对象,然后调用setTarget()方法设置要设置该动画效果的View,最后调用start()方法,启动动画。
[code]Animator animator=AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.animator_rotation); animator.setTarget(imageView); animator.start();
Layout Animations(布局动画)
布局动画主要使用LayoutTransition类为布局的容器设置动画,当容器中的视图层次发生变化时存在过渡的动画效果。用法
[code]LayoutTransition transition = new LayoutTransition(); transition.setAnimator(LayoutTransition.APPEARING,animator); transition.setAnimator(LayoutTransition.DISAPPEARING,animator); transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, transition.getAnimator(LayoutTransition.CHANGE_DISAPPEARING)); transition.setAnimator(LayoutTransition.CHANGE_APPEARING, transition.getAnimator(LayoutTransition.CHANGE_APPEARING));
过渡的动画效果的分类:
1. LayoutTransition.APPEARING 当一个View在ViewGroup中出现时,对此View设置的动画
2. LayoutTransition.CHANGE_APPEARING 当一个View在ViewGroup中出现时,对此View对其他View位置造成影响,对其他View设置的动画
3. LayoutTransition.DISAPPEARING 当一个View在ViewGroup中消失时,对此View设置的动画
4. LayoutTransition.CHANGE_DISAPPEARING 当一个View在ViewGroup中消失时,对此View对其他View位置造成影响,对其他View设置的动画
代码示例
我们在布局中加入一个按钮和一个GridLayout,点击按钮向GridLayout中添加按钮。[code]<LinearLayout 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" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="向布局中添加按钮" /> <GridLayout android:id="@+id/gridlayout" android:layout_width="match_parent" android:layout_height="match_parent" android:columnCount="3"></GridLayout> </LinearLayout>
同样的,我们自定义一个动画效果,用于对此View的添加效果:
[code]<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:duration="3000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360"></objectAnimator> </set>
最后是主活动中的代码:
[code]import android.animation.Animator; import android.animation.AnimatorInflater; import android.animation.LayoutTransition; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.GridLayout; public class MainActivity extends AppCompatActivity { private GridLayout gridLayout; private int count; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gridLayout= (GridLayout) findViewById(R.id.gridlayout); Animator animator= AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.animator_rotation); LayoutTransition transition = new LayoutTransition(); transition.setAnimator(LayoutTransition.CHANGE_APPEARING, transition.getAnimator(LayoutTransition.CHANGE_APPEARING)); transition.setAnimator(LayoutTransition.APPEARING, animator); transition.setAnimator(LayoutTransition.DISAPPEARING, animator); transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, transition.getAnimator(LayoutTransition.CHANGE_DISAPPEARING)); gridLayout.setLayoutTransition(transition); Button button= (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { count++; final Button btn=new Button(getApplicationContext()); ViewGroup.LayoutParams params=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); btn.setLayoutParams(params); btn.setText("按钮"+count); int position=Math.min(1, gridLayout.getChildCount()); gridLayout.addView(btn,position); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { gridLayout.removeView(btn); } }); } }); } }
实现效果:
相关文章推荐
- 点击事件中获取点击的坐标
- Android:BroadcastReceiver
- Android图片压缩方法总结
- android中getSystemService详解
- Android开发艺术探索读书笔记(一)
- Android的权限permission
- android避免大量图片内存泄露问题
- Android Studio 添加工程依赖(更新中)
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- Android性能专项测试之Memory Monitor工具
- Android性能优化
- 下载Android 源码(高墙之下,只能用镜像啦)
- Android电话拨打流程源码分析
- Android页面初始化时让控件失去焦点
- android selector 控件
- Android中的音乐播放
- android oom 全解析
- 如何反编译 android 中 /data/dalvik-cache/arm 下的文件
- android 读取远程html内容
- Android : GestureDetector手势检测