android中帧动画的实现方式

帧动画实现的第一种方式的步骤:
利用xml文件的形式实现:
    (1)找一些图片放到drawable文件夹下
    (2)在drawable文件夹下通过xml文件生成动画 创建的就是一个animation_list的一个xml文件
    android:oneshot="false" >//设置是否循环播放,默认的是循环播放,false为只播放一次
            android:drawable="@drawable/img1"
        android:duration="50"/>
            android:drawable="@drawable/img2"
        android:duration="50"/>
            android:drawable="@drawable/img3"
        android:duration="50"/>


    (3)找到咱们写的那个动画xml
    (4)通过imageView设置一个背景图
    (5)通过动画对象的start(),stop()方法来开启或者是停止动画。
public class ToXMLActivity extends Activity {

    private Button btn_start, btn_stop;
    private ImageView iv_frame;
    private AnimationDrawable frameAnim;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_frameanim);

        btn_start = (Button) findViewById(R.id.btn_start);
        btn_stop = (Button) findViewById(R.id.btn_stop);

        btn_start.setOnClickListener(click);
        btn_stop.setOnClickListener(click);

        iv_frame = (ImageView) findViewById(R.id.iv_frame);
        
        // 通过逐帧动画的资源文件获得AnimationDrawable示例
        frameAnim=(AnimationDrawable) getResources().getDrawable(R.drawable.bullet_anim);
        // 把AnimationDrawable设置为ImageView的背景
        iv_frame.setBackgroundDrawable(frameAnim);
    }

    private View.OnClickListener click = new OnClickListener() {

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.btn_start:
                start();
                break;
            case R.id.btn_stop:
                stop();
                break;
            default:
                break;
            }
        }
    };

    protected void start() {
        if (frameAnim != null && !frameAnim.isRunning()) {
            frameAnim.start();
            Toast.makeText(ToXMLActivity.this, "开始播放", 0).show();
            Log.i("main", "index 为5的帧持续时间为:"+frameAnim.getDuration(5)+"毫秒");
            Log.i("main", "当前AnimationDrawable一共有"+frameAnim.getNumberOfFrames()+"帧");
        }
    }

    protected void stop() {
        if (frameAnim != null && frameAnim.isRunning()) {
            frameAnim.stop();
            Toast.makeText(ToXMLActivity.this, "停止播放", 0).show();
        }
    }
}
帧动画实现的第二种方式的步骤:
利用代码的形式实现:
    (1)创建图片动画的对象
      (2) 一帧一帧的添加图片,并且设置了显示时间
    (3 设置是否为循环播放 默认的就是只播放一次
    (4)开启动画,或者停止动画
public class ToCodeActivity extends Activity {
    private Button btn_start, btn_stop;
    private ImageView iv_frame;
    private AnimationDrawable frameAnim;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_frameanim);

        btn_start = (Button) findViewById(R.id.btn_start);
        btn_stop = (Button) findViewById(R.id.btn_stop);

        btn_start.setOnClickListener(click);
        btn_stop.setOnClickListener(click);

        iv_frame = (ImageView) findViewById(R.id.iv_frame);

        frameAnim =new AnimationDrawable();
        // 为AnimationDrawable添加动画帧
        frameAnim.addFrame(getResources().getDrawable(R.drawable.img0), 50);
        frameAnim.addFrame(getResources().getDrawable(R.drawable.img1), 50);
        frameAnim.addFrame(getResources().getDrawable(R.drawable.img2), 50);
        frameAnim.addFrame(getResources().getDrawable(R.drawable.img3), 50);
        frameAnim.addFrame(getResources().getDrawable(R.drawable.img4), 50);
        frameAnim.addFrame(getResources().getDrawable(R.drawable.img5), 50);
        frameAnim.addFrame(getResources().getDrawable(R.drawable.img6), 50);
        frameAnim.addFrame(getResources().getDrawable(R.drawable.img7), 50);
    
        // 设置为循环播放
        frameAnim.setOneShot(false);
        
        // 设置ImageView的背景为AnimationDrawable
        iv_frame.setBackgroundDrawable(frameAnim);
    }

    private View.OnClickListener click = new OnClickListener() {

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.btn_start:
                start();
                break;
            case R.id.btn_stop:
                stop();
                break;
            default:
                break;
            }

        }
    };

    protected void start() {
        if (frameAnim != null && !frameAnim.isRunning()) {
            frameAnim.start();
            Toast.makeText(ToCodeActivity.this, "开始播放", 0).show();
        }
    }
    protected void stop() {
        if (frameAnim != null && frameAnim.isRunning()) {
            frameAnim.stop();
            Toast.makeText(ToCodeActivity.this, "停止播放", 0).show();
        }
    }

}
两种实现方式的区别:xml文件生成的动画默认的是循环播放,java代码生成的动画默认是只播放一次
注意:如果在一个项目文件夹下有两个或两个以上的Activity要在清单文件下注册声明

你可能感兴趣的:(android中帧动画的实现方式)