安卓开发帧动画frame的加载

238 阅读1分钟

说明:

动画需要在页面窗口初始化完成时才能启动,所以我们可以在onWindowFocusChanged中启动动画,或者使用按钮点击启动动画
使用步骤如下:
在drawable中新建一个xml文件,在其中定义动画,并设置给相应的控件做背景

<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/loadanimation_icon1"
        android:duration="150"></item>
    <item android:drawable="@drawable/loadanimation_icon2"
    android:duration="150"></item>
    <item android:drawable="@drawable/loadanimation_icon3"
        android:duration="150"></item>
    <item android:drawable="@drawable/loadanimation_icon4"
        android:duration="150"></item>
    <item android:drawable="@drawable/loadanimation_icon5"
        android:duration="150"></item>
    <item android:drawable="@drawable/loadanimation_icon6"
        android:duration="150"></item>
    <item android:drawable="@drawable/loadanimation_icon7"
        android:duration="150"></item>

xml:android:background="@drawable/anim_frame"/>
java:

  /**
     * 静态加载缩放
     */
    public void setScaleByXml(){
        Animation animation= AnimationUtils.loadAnimation(this,R.anim.anim);
        tv_content.startAnimation(animation);
    }
    /**
     * 动态加载缩放
     */
    public void setScaleByJava(){
        ScaleAnimation animation=new ScaleAnimation(0,2,0,2,
                Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
        tv_content.startAnimation(animation);
    }

    /**
     * 静态加载translate
     */
    public void setTranslateByXml(){
        Animation anim=AnimationUtils.loadAnimation(this,R.anim.transfer);
        tv_content.startAnimation(anim);
    }

    /**
     * 静态加载frame帧动画,不能再onCreate中加载
     * @param hasFocus
     */
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        AnimationDrawable animationDrawable= (AnimationDrawable) iv.getBackground();
        animationDrawable.start();
    }

    /**
     * 动态加载frame动画
     */
    public void setFrameByJava(){
        AnimationDrawable drawable=new AnimationDrawable();
        for (int i = 1; i <=7; i++) {
             int id=getResources().getIdentifier("loadanimation_icon"+i,"drawable",getPackageName());
            Drawable draw= ContextCompat.getDrawable(this,id);
            drawable.addFrame(draw,150);
        }
        drawable.setOneShot(false);
        iv.setImageDrawable(drawable);
        drawable.start();
    }