Android动画之:Frame动画

来源:互联网 发布:大数据在零售业的应用 编辑:程序博客网 时间:2024/05/16 00:42

     Frame动画是Android动画中的一种 ,类似于我们看电影一样,动画是由N张图片组成的,在地一的时间内轮流显示图片实现动画现象。实现Frame动画也有两种方式,一种在xml中写动画布局,另外一种是纯代码实现 。

    先看下Frame动画的xml布局方法:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/animation_1" android:duration="500" />
    <item android:drawable="@drawable/animation_2" android:duration="500" />
    <item android:drawable="@drawable/animation_3" android:duration="500" />
    <item android:drawable="@drawable/animation_4" android:duration="500" />
    <item android:drawable="@drawable/animation_5" android:duration="500" />
    <item android:drawable="@drawable/animation_6" android:duration="500" />
</animation-list>

在代码中实现就三句代码:

         animationIv.setBackgroundResource(R.anim.test_animation);  /**animationIv是我们要显示的ImageView,已经写在而局文件中*/
        AnimationDrawable anim = (AnimationDrawable) animationIv.getBackground();  
        anim.start(); 

另外一种 就是纯属代码实现:

public class FrameAnimationActivity extends Activity {
private Button startBtn;
private ImageView animationIv;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo);
startBtn = (Button) findViewById(R.id.start_btn);
animationIv = (ImageView) findViewById(R.id.animation_iv);
startBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startAnimation(animationIv);
}
});
}

/**用代码实现Frame动画*/
private void startAnimation(ImageView iv) {
/**Frame动画对象*/
AnimationDrawable anim = new AnimationDrawable();
/**添加动画元素*/
for (int i = 1; i <= 6; i++) {
/**根据资源名称和目录获取对应的资源ID*/
int id = getResources().getIdentifier("animation_" + i, "drawable", getPackageName());
/**根据ID获取到Drawable对象*/
Drawable drawable = getResources().getDrawable(id);
/**添加到AnimationDrawable中,300是指动画时间,单位:毫秒*/
anim.addFrame(drawable, 300);
}
/**设置动画的循环方式,true为只一次,fasle为不断循环播放*/
anim.setOneShot(false); // 设置为loop
/**设置ImageView的背景为动画对象*/
iv.setBackgroundDrawable(anim); 
/**开始动画*/
anim.start(); 
}
/**放置在/res下的anim或drawable目录中(/res/[anim | drawable]/filename.xml),文件名可以作为资源ID在代码中引用
* 我们需要把这段代码放在onWindowFocusChanged方法中,当Activity展示给用户时,onWindowFocusChanged方法就会被调用,
* 我们正是在这个时候实现我们的动画效果。onWindowFocusChanged是在onCreate之后被调用的*/
@Override  
    public void onWindowFocusChanged(boolean hasFocus) {  //这里是用xml写的动画,与上面点击事件的动画只需保留任意一个就可以
        super.onWindowFocusChanged(hasFocus);  
        animationIv.setBackgroundResource(R.anim.test_animation);  
        AnimationDrawable anim = (AnimationDrawable) animationIv.getBackground();  
        anim.start();  
    }  
}

0 0
原创粉丝点击