第七章 实现炫酷效果—图像和动画(6)
2015-05-31 12:45
197 查看
7.8 渐变动画—Frame Animation
FrameAnimation是按顺序播放事先做好的图像,跟播放电影类似。可以参考前面的7.3.7章节——《简单的帧动画—AnimationDrawable》。经验分享: AnimationDrawable也可以通过代码来生成AnimationDrawable对象: AnimationDrawable mAnimationDrawable = new AnimationDrawable(); mAnimationDrawable.addFrame(Drawable frame,int duration);//来添加帧数 Drawable mDrawable = mAnimationDrawable. getFrame(int index);//来获取 |
// import略 public class myAnimation extends Activity implements OnClickListener { private Button mButton; private AnimationDrawable mAnimationDrawable; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mAnimationDrawable = new AnimationDrawable(); mAnimationDrawable.addFrame(getResources().getDrawable(R.drawable.img_1), 200); mAnimationDrawable.addFrame(getResources().getDrawable(R.drawable.img_2), 200); mAnimationDrawable.addFrame(getResources().getDrawable(R.drawable.img_3), 200); mButton = (Button) findViewById(R.id.button_id); mButton.setBackgroundDrawable(mAnimationDrawable); mButton.setOnClickListener(this); } public void onClick(View button) { switch (button.getId()) { case R.id.button_id: { // 动画是否正在运行 if(mAnimationDrawable.isRunning()){ // 停止动画播放 mAnimationDrawable.stop(); } else{ // 开始或者继续动画播放 mAnimationDrawable.start(); } } break; } } |
7.9 随意组合动画效果—AnimationSet
AnimationSet是一个animation的一个子类,可以将多个animation放到一个list集合中。实际上是animation的一个集合。需要对animation的基本设置可以通过animationset来设置。如果需要对一个控件进行多种动画设置,可以采用animationset。下面举个例子:
AnimationSet mAnimationSet = new AnimationSet(true); mAnimationSet.setFillEnabled(true); mAnimationSet.setInterpolator(new BounceInterpolator()); TranslateAnimation ta = new TranslateAnimation(-300, 100, 0, 0); ta.setDuration(2000); mAnimationSet.addAnimation(ta); TranslateAnimation ta2 = new TranslateAnimation(100, 0, 0, 0); ta2.setDuration(2000); ta2.setStartOffset(2000); mAnimationSet.addAnimation(ta2); // 设置动画时间 mAnimationSet.setDuration(2000); // 动画重复次数(-1 表示一直重复) mAnimationSet.setRepeatCount(-1); // 使用和前面的Animation是一样的 mButton.startAnimation(mAnimationSet); |
经验分享: mAnimationSet整体认为是一个动画,mAnimationSet开始的时候其中的子动画就一起开始了。如果需要按顺序的播放出来,可以设置各自的subAnimation.setStartOffset(2000);这样就可以在开始之后的2秒后再播放subAnimation。 |
7.10 加速的工具—Interpolator
android.view.animation.Interpolator定义了动画变化的速率。在animations下定义了以下几种interpolator:
l AccelerateDecelerateInterpolator—在动画开始与结束的地方速率改变比较慢,在中间的时候较快。
l AccelerateInterpolator—在动画开始的时候改变较慢,然后开始加速。
l CycleInterpolator—动画循环播放特定次数,速率改变沿着正弦曲线。
l DecelerateInterpolator—在动画开始的时候叫慢,然后开始减速。
l LinearInterpolator—动画以均匀速率改变。
下面提供一个如何设置animation的Interpolator例子。
在xml中的设置:
android:interpolator="@android:anim/accelerate_interpolator" |
mAnimationSet.setInterpolator(new AccelerateDecelerateInterpolator()); |
相关文章推荐
- android rxjava个人自学记录开篇(不改)
- 盛年不重来,一日难再晨。及时宜自勉,岁月不待人。
- MySQL where
- 勤学如春起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏。
- 第七章 实现炫酷效果—图像和动画(5)
- Python之学习笔记(常用内建模块)
- 成功领导力的10大关键
- 爱对了是爱情,爱错了是青春。
- Activity和Fragment交互
- 人们抗拒组织变革的十大原因
- 《Cortex-CM3权威指南》——异常
- 李彦宏:PC时代结束
- 目标板通过nfs挂载根文件系统
- MySQL 查询数据
- 替代文本中的字符-python
- java享元模式
- Searching: Chained Hash Table Search And Insertion-2
- R语言入门学习
- Android 全局变量
- Linux下C的编写和执行