android动画
2016-03-18 16:47
447 查看
动画分类
变换动画Tween
布局动画Layout
帧动画Frame
属性动画Property
使用的时候加载文件AnimationUtils.loadAnimation :
2 java代码方式 AlphaAnimation ScaleAnimation, TranslateAnimation , RotateAnimation
当一些参数需要计算, 动态确定 , 就使用代码方式, 否则使用配置文件方式
- alpha渐变透明度动画
- scale渐变尺寸动画
- translate位置移动动画
- rotate旋转动画
fillAfter: true的话 动画转化在动画结束后被应用
fillBefore: true的话 动画转化在动画开始前被应用
interpolator: 动画插入器 加速,减速插入器
repeatCount: 动画重复次数
repateMode: 顺序重复/倒序重复
startOffset: 动画之间的时间间隔
fromAlpha 动画起始透明度
toAlpha 终止时透明度
xml文件方式示例:
//Activity
//alpha.xml
fromX,toX x坐标伸缩尺寸
fromY,toY Y坐标伸缩尺寸
pivoX,pivoY 伸缩动画相对于,x,y坐标开始的位置
fromXdelta , fromYDelta 起始X,Y
toXDelta, toYDelta 结束时X,Y
fromDegree 起始角度
toDegree 终止角度
pivotX,pivotY 旋转中心点
//startOffset 动画延迟时间
//Activity
//continue_anim.xml
使用透明度动画循环
参数1: 第二个activity 进入动画配置文件
参数2: 第一个activity退出动画配置文件
//zoom_in.xml
//zoom_out.xml
使用LayoutAnimationController , 来加载动画,应用到layout下每一个子view
例子中 R.anim.zoom_in和上面使用的是同样的文件
一个item标签定义要显示的drawable下图片(帧图),且指定显示它的时间(毫秒为单位), 如
//anim_list.xml , “@drawable/one” ,”@drawable/two” 这些都是准备好的图片 , 每幅图片停留时间为500毫秒
//使用该动画, 逐帧动画
逐帧动画 除start外还有一些控制方法 可参考:
/article/4903196.html
变换动画Tween
布局动画Layout
帧动画Frame
属性动画Property
Annimation 动画使用方式
1 配置文件方式 /res/anim – alpha,scale, translate,rotate使用的时候加载文件AnimationUtils.loadAnimation :
Animation scale = AnimationUtils.loadAnimation(TweenActivity.this,R.anim.scale_anim); img.startAnimation(scale);
2 java代码方式 AlphaAnimation ScaleAnimation, TranslateAnimation , RotateAnimation
当一些参数需要计算, 动态确定 , 就使用代码方式, 否则使用配置文件方式
Animation alpha = new AlphaAnimation(0.1f, 1.0f); alpha.setDuration(5000); img.startAnimation(alpha);
Tween Animation 动画
Tween Animation:变换动画分类:- alpha渐变透明度动画
- scale渐变尺寸动画
- translate位置移动动画
- rotate旋转动画
Tween Animation 共同属性
Duration: 动画持续时间毫秒fillAfter: true的话 动画转化在动画结束后被应用
fillBefore: true的话 动画转化在动画开始前被应用
interpolator: 动画插入器 加速,减速插入器
repeatCount: 动画重复次数
repateMode: 顺序重复/倒序重复
startOffset: 动画之间的时间间隔
透明度动画
常用属性:fromAlpha 动画起始透明度
toAlpha 终止时透明度
xml文件方式示例:
//Activity
case R.id.alpha: { loadAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha); image.startAnimation(loadAnimation); break; }
//alpha.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:duration="1000" android:fromAlpha="0.1" android:toAlpha="1.0" > </alpha> </set>
缩放动画 ScaleAnimation
常用属性:fromX,toX x坐标伸缩尺寸
fromY,toY Y坐标伸缩尺寸
pivoX,pivoY 伸缩动画相对于,x,y坐标开始的位置
case R.id.scale: { loadAnimation = AnimationUtils.loadAnimation(this, R.anim.scale); image.startAnimation(loadAnimation); break; }
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <scale android:duration="2000" android:fillAfter="false" //动画完成后是否保持最后的状态, 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>
位移动画
常用属性:fromXdelta , fromYDelta 起始X,Y
toXDelta, toYDelta 结束时X,Y
case R.id.translate: { loadAnimation = AnimationUtils .loadAnimation(this, R.anim.translate); image.startAnimation(loadAnimation); break; }
<?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>
RotateAnimation 旋转动画
常用属性:fromDegree 起始角度
toDegree 终止角度
pivotX,pivotY 旋转中心点
case R.id.rotate: { loadAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate); image.startAnimation(loadAnimation); break; }
<?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>
组合动画
设置 AnimationListener
例1: 先动画A , 设置A的AnimationListener , 当onAnimationEnd触发(即A播放完毕)时, 开始播放B.case R.id.continue_btn: { loadAnimation = AnimationUtils .loadAnimation(this, R.anim.translate); image.startAnimation(loadAnimation); //结束时准备调用的动画, 要在回调中使用, 所以要设置为final final Animation loadAnimation2 = AnimationUtils.loadAnimation(this, R.anim.rotate); loadAnimation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation arg0) { } @Override public void onAnimationRepeat(Animation arg0) { } @Override public void onAnimationEnd(Animation arg0) { // TODO Auto-generated method stub image.startAnimation(loadAnimation2); } }); break; }
动画集 AnimationSet
例2: 使用动画集 AnimationSet ,其中定义动画A, B 为动画B设置startOffset , 其值为前一个动画播放所需要的时间//startOffset 动画延迟时间
//Activity
case R.id.continue_btn2: { loadAnimation = AnimationUtils.loadAnimation(this, R.anim.continue_anim); image.startAnimation(loadAnimation); break; }
//continue_anim.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:duration="3000" android:fromAlpha="0.2" android:toAlpha="1.0" /> <alpha android:duration="3000" android:fromAlpha="1.0" // 上一个动画duration 3秒, 这里设置startOffset 延迟3秒, 于是实现了连续播放, 组合动画 android:startOffset="3000" android:toAlpha="0.2" /> </set>
setRepeatCount , setRepeatMode
例3: 循环闪烁 利用Animation 的setRepeatCount, setRepeatMode来实现动画循环使用透明度动画循环
case R.id.flash: { AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f); alphaAnimation.setDuration(100); alphaAnimation.setRepeatCount(10); // 倒序重复REVERSE 正序重复RESTART alphaAnimation.setRepeatMode(Animation.REVERSE); image.startAnimation(alphaAnimation); break; }
overridePendingTransition 方法 Activity切换动画
例4: Activity切换动画, 使用overridePendingTransition方法参数1: 第二个activity 进入动画配置文件
参数2: 第一个activity退出动画配置文件
case R.id.change: { Intent intent = new Intent(MainActivity.this, MainActivity2.class); startActivity(intent); //第一个参数指定新启动的activity由小变大zoom_in , //第二个参数指定当前activity 由大变小zoom_out overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out); break; }
//zoom_in.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator" > <scale android:duration="1000" android:fromXScale="0.1" android:fromYScale="0.1" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.0" android:toYScale="1.0" /> <alpha android:duration="1000" android:fromAlpha="0" android:toAlpha="1.0" /> </set>
//zoom_out.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator" android:zAdjustment="top" > <scale android:duration="@android:integer/config_mediumAnimTime" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="50%p" android:pivotY="50%p" android:toXScale="0.1" android:toYScale="0.1" /> <alpha android:duration="@android:integer/config_mediumAnimTime" android:fromAlpha="1.0" android:toAlpha="0" /> </set>
布局动画 Layout Animation
为View Groups 添加动画使用LayoutAnimationController , 来加载动画,应用到layout下每一个子view
例子中 R.anim.zoom_in和上面使用的是同样的文件
protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.list_layout); listView=(ListView) findViewById(R.id.listView); List<String>list=new ArrayList<String>(); for(int i=0;i<20;i++) { list.add("测试数据"+i); } ArrayAdapter<String>adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); listView.setAdapter(adapter); //生成布局动画控制器, 并加载动画 LayoutAnimationController lac=new LayoutAnimationController(AnimationUtils.loadAnimation(this, R.anim.zoom_in)); //设置动画顺序 lac.setOrder(LayoutAnimationController.ORDER_NORMAL); // 应用动画 listView.setLayoutAnimation(lac); listView.startLayoutAnimation(); //按设置, 对子view动画依次播放 }
逐帧动画 FrameAnimation
drawable下建xml文件, 用animation-list标签(item标签集合),一个item标签定义要显示的drawable下图片(帧图),且指定显示它的时间(毫秒为单位), 如
//anim_list.xml , “@drawable/one” ,”@drawable/two” 这些都是准备好的图片 , 每幅图片停留时间为500毫秒
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/one" android:duration="500"/> <item android:drawable="@drawable/two" android:duration="500"/> <item android:drawable="@drawable/three" android:duration="500"/> <item android:drawable="@drawable/four" android:duration="500"/> <item android:drawable="@drawable/five" android:duration="500"/> <item android:drawable="@drawable/six" android:duration="500"/> </animation-list>
//使用该动画, 逐帧动画
逐帧动画 除start外还有一些控制方法 可参考:
/article/4903196.html
case R.id.frame: { //直接只是加载动画图片 setImageResource 到ImageView, 在很多情况下动画不会运行, 必须先生成AnimationDrawable对象 // image.setImageResource(R.drawable.anim_list); AnimationDrawable aniDrawable = null ; /* 方法1: // aniDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.anim_list); // image.setBackground(aniDrawable); aniDrawable.start(); */ // 方法2: image.setImageResource(R.drawable.anim_list); aniDrawable = (AnimationDrawable) image.getDrawable(); aniDrawable.start(); break; }
相关文章推荐
- ListView做一个简单的物价条
- android 热修复 HotFix 混淆apk生成patch包方案
- android GPS定位两点间距离
- Android开发应用程序发布到Google Play步骤
- Android中广播接收者BroadcastReceiver详解
- android RecyclerView 实现瀑布流带图库浏览效果
- android studio改变主题字体大小
- Android 递归栈溢出问题解决
- Android之Activity的四种启动模式
- android中延时操作三种方式
- android中用style简化布局文件
- Android的第一堂课,Activity生命周期
- android错误总结
- android 基于树结构的任意层级列表
- Android开源项目及库搜集
- Android Fragment 真正的完全解析(下)
- 六款值得推荐的android(安卓)开源框架简介
- Android Fragment 真正的完全解析(上)
- Android之Handler(异步消息处理)机制
- Android断点续传的原理剖析与实例讲解