Android 动画总结
Posted 暴走灬青春
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 动画总结相关的知识,希望对你有一定的参考价值。
1. (逐)帧动画
1.res右键->新建android Xml file,resource type选择帧动画Drawable,root element选择 第一个A:animation-list帧动画,file起个名字,
1-1:系统会自动在src目录下创建一个文件夹,名字是 drawable,xml文件 在此目录
2.<?xml version="1.0" encoding="utf-8"?>
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">
<item android:drawable="@drawable/g1" android:duration="200"></item>
<item android:drawable="@drawable/g2" android:duration="200"></item>
<item android:drawable="@drawable/g3" android:duration="200"></item>
<item android:drawable="@drawable/g4" android:duration="200"></item>
<item android:drawable="@drawable/g5" android:duration="200"></item>
</animation-list>
3.android:oneshot=”true” 动画执行一次oneshot
4.在布局文件中 src引入此 xml文件,android:src=”@drawable/名字”
5.在代码中播放
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
//判断是否已经播放了
if (animationDrawable.isRunning())
//停止动画
animationDrawable.stop();
//重新开始播放
animationDrawable.start();
注: 动画播完了 实际上还在running 再点击播放没有反应
imageView.getDrawable()
6.没有在布局文件中关联xml资源,代码中关联
//给ImageView设置动画资源
imageView.setImageResource(R.drawable.frame_wifi);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
if (animationDrawable.isRunning())
animationDrawable.stop();
animationDrawable.start();
imageView.setImageResource(R.drawable.frame_wifi);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
2. 补间动画(tween Animation)(渐变动画)
1.透明 通过编码的方式
`/*
* 下面的代码只能在Android4.1以下执行
*/
// //从完全透明(不可见)到不透明(可见)
// AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
// alphaAnimation.setDuration(5000);//设置动画的执行时长
// //把动画设置给ImageView
// imageView.setAnimation(alphaAnimation);
// //开始执行动画
// alphaAnimation.start();
/*
* 以下代码全兼容
*/
// 从完全透明(不可见)到不透明(可见)
AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
alphaAnimation.setDuration(50);// 设置动画的执行时长
// 设置重复的次数(-1 代表无限循环)
alphaAnimation.setRepeatCount(Animation.INFINITE);
// 执行第二遍的时候从上一遍的末尾开始
alphaAnimation.setRepeatMode(Animation.REVERSE);
// 让iamgeView执行动画
imageView.startAnimation(alphaAnimation);`
通过动画文件(xml)的方式
在res/anim/创建补间动画资源文件(xml)
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1"
android:toAlpha="0"
android:duration="1000"
android:repeatCount="1"//总共执行的次数要+1
android:fillAfter="true"//执行后维持状态不变
android:repeatMode="restart"
>
</alpha>
android:fillAfter=”true”//执行后维持状态不变
在代码中将动画资源文件转换为Animation动画,然后再使用
//把补间动画资源文件转换为Animation对象,然后再使用
Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha_anim);
//让iamgeView执行动画
imageView.startAnimation(animation);
2.平移
`public void translate(View view)
TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, -100, 200);
translateAnimation.setDuration(5000);
translateAnimation.setFillAfter(true);
translateAnimation.setRepeatCount(Animation.INFINITE);
translateAnimation.setRepeatMode(Animation.REVERSE);
imageView.startAnimation(translateAnimation);
`
注: 1点击事件只会在原来 图片位置
2.整个布局leanarlayout 也是view 也可以设置动画
3.缩放动画
`public void scale(View view)
ScaleAnimation scaleAnimation = new ScaleAnimation(1, 10, 1, 10, Animation.RELATIVE_TO_SELF, 0.4f, Animation.RELATIVE_TO_SELF, 0.3f);
scaleAnimation.setDuration(1000);
scaleAnimation.setRepeatCount(5);
imageView.startAnimation(scaleAnimation);
`
4.旋转动画
`public void rotate(View view)
// 不倒翁效果
// RotateAnimation rotateAnimation = new RotateAnimation(-30, 30,
// Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1);
// 摆钟效果
// RotateAnimation rotateAnimation = new RotateAnimation(-30, 30,
// Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0);
RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setDuration(100);
rotateAnimation.setRepeatCount(Animation.INFINITE);
rotateAnimation.setRepeatMode(Animation.RESTART);
imageView.startAnimation(rotateAnimation);
`
- 动画集
// 同时执行多个动画
public void set(View view)
ScaleAnimation scaleAnimation = new ScaleAnimation(0.5f, 1.5f, 0.5f, 1.5f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation.setDuration(5000);
scaleAnimation.setRepeatCount(Animation.INFINITE);
scaleAnimation.setRepeatMode(Animation.REVERSE);
RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setDuration(5000);
rotateAnimation.setRepeatCount(Animation.INFINITE);
rotateAnimation.setRepeatMode(Animation.RESTART);
//创建动画集
AnimationSet animationSet = new AnimationSet(false);
//添加动画
animationSet.addAnimation(scaleAnimation);
animationSet.addAnimation(rotateAnimation);
imageView.startAnimation(animationSet);
3. 属性动画
透明 代码实现方式
/*-
- 参数1 要修改的目标控件对象
-
- 参数2:要修改这个控件的哪个参数呢?参数名传递进来
-
参数3:要修改的值,可变参数
*/
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView, “alpha”, 0,1);
//设置延时
objectAnimator.setDuration(2000);
objectAnimator.setRepeatCount(ObjectAnimator.INFINITE);
objectAnimator.setRepeatMode(ObjectAnimator.REVERSE);
objectAnimator.start();布局文件实现方式animator
`* 在res/animator/下创建动画资源(xml)
-
以上是关于Android 动画总结的主要内容,如果未能解决你的问题,请参考以下文章
在动画集结束时在 MonoTouch 中实现 CAKeyFrameAnimation 回调?