Android 动画Animation

动画Animationandroid

有两种加载方式:ide

       一:再res文件夹下的anim文件夹里面的xml文件中编写实现(帧动画得再drawable中写)布局

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <alpha
  
    </alpha>

</set>

                 中间部分是相应的动画名称:动画

               一共有alpha(透明度),rotate(旋转),scale(缩放),translate(平移)四种基本的动画this

       二:经过再代码中用相应的类实现。spa

               一样的相应类的名称AlphaAnmation, RotateAnmation, ScaleAnmation, TranslateAnmationcode

 

先给出再xml文件中怎么样写动画和怎样调用:xml

透明度动画:blog

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--透明度动画
        duration:动画时间
        fromAlpha:开始的透明度
        toAlpha:结束的透明度-->
    <alpha
        android:duration="1000"
        android:fromAlpha="0.1"
        android:toAlpha="1.0" >
    </alpha>

</set>

旋转动画:three

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--旋转动画
        duration:动画时间
        fromDegrees:开始的角度
        toDegrees:结束的角度
        pivotX:旋转中心X以图片的宽的百分比位置开始
        pivotY:旋转中心Y以图片的高的百分比位置开始
        interpolator:旋转动画的样式-->
    <rotate
        android:duration="1000"
        android:fromDegrees="0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="+360" />

</set>

缩放动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--缩放动画
        duration:动画时间
        fillAfter:动画结束后是否回复原样
        fromXScale:开始时缩放宽的比例
        fromYScale:开始时缩放高的比例
        toXScale:结束时缩放宽的比例
        toYScale:结束时缩放高的比例
        pivotX:以图片的宽的百分比位置开始
        pivotY:以图片的高的百分比位置开始
        interpolator:缩放动画的样式,这里是匀加速-->
    <scale
        android:duration="2000"
        android:fillAfter="false"
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />

</set>

位移动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--透明度动画
        duration:动画时间
        fromXDelta:开始时X位置
        fromYDelta:开始时Y位置
        toXDelta:结束时Y位置
        toYDelta:结束时Y位置
        位置都是相对与图片中心点的相对位置-->
    <translate
        android:duration="1000"
        android:fromXDelta="10"
        android:fromYDelta="10"
        android:toXDelta="100"
        android:toYDelta="100" />

</set>

 

  实现方法:(这里用图片加载为例子)

loadAnimation = AnimationUtils.loadAnimation(this, R.anim.XXX);XXX是动画的xml文件明
image.startAnimation(loadAnimation);

动态加载也相似:(以透明度为例子)
AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);//构建透明度动画透明度0.1到1
alphaAnimation.setDuration(100);//动画时间
image.startAnimation(alphaAnimation);


接下来将一下组合动画:有两种组合动画的方式
第一种:直接再xml文件种这样写:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--startOffset:延迟多少时间后执行-->
    <alpha
        android:duration="3000"
        android:fromAlpha="0.2"
        android:toAlpha="1.0" />
    <alpha
        android:duration="3000"
        android:fromAlpha="1.0"
        android:startOffset="3000"
        android:toAlpha="0.2" />

</set>
 

而后加载这个动画文件便可

 

第二种:

//连续1(先位移再旋转)
            case R.id.continue_btn: {
                loadAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);
                final Animation loadAnimation2 = AnimationUtils.loadAnimation(this, R.anim.rotate);
                image.startAnimation(loadAnimation);
                //设置动画监听器
                loadAnimation.setAnimationListener(new AnimationListener() {
                    @Override//动画开始时回调
                    public void onAnimationStart(Animation arg0) {
                        // TODO Auto-generated method stub
                    }

                    @Override//动画进行时回调
                    public void onAnimationRepeat(Animation arg0) {
                        // TODO Auto-generated method stub
                    }

                    @Override//动画结束时回调
                    public void onAnimationEnd(Animation arg0) {
                        // TODO Auto-generated method stub
                        image.startAnimation(loadAnimation2);
                    }
                });
                break;
            }

这种方法更灵活

哦队了除了这种以外,其实再建立动画类的时候能够这样实现重复动画:

 TranslateAnimation translate = new TranslateAnimation(-50, 50, 0, 0);
                translate.setDuration(1000);//动画时间
                translate.setRepeatCount(Animation.INFINITE);//无限重复
                translate.setRepeatMode(Animation.REVERSE);//倒序重复REVERSE  正序重复RESTART
                image.startAnimation(translate);

 

咱们再Activity切换的时候也能够添加切换的动画效果哦!

咱们只须要用这个方法便可

//第二个Activity退出的动画,第一个Activity进入的动画
overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out);

布局加载子布局的时候也能够用到动画!(以ListView为例子)
public class ListActivity extends Activity{
    
    private ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_layout);
        listView=(ListView) findViewById(R.id.listView);
        List<String>list=new ArrayList<String>();
        for(int i=0;i<20;i++)
        {
            list.add("LWJ"+i);
        }
        ArrayAdapter<String>adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
        listView.setAdapter(adapter);
        /**
         * 布局动画控制器
         * 生成一个动画控制器,里面的参数:
         * AnimationUtils.loadAnimation(this, R.anim.zoom_in)动画集合
         * 给this当前布局加载
         * R.anim.zoom_in: 动画
         */
        LayoutAnimationController lac=new LayoutAnimationController(AnimationUtils.loadAnimation(this, R.anim.zoom_in));
        //子控件加载顺序,这里是顺序加载,ORDER_RANDOM随机加载
        lac.setOrder(LayoutAnimationController.ORDER_NORMAL);
        listView.setLayoutAnimation(lac);//加载布局动画
        listView.startLayoutAnimation();//开始动画
    }

}

 

最后讲一个开头就说了的帧动画,注意得再drawable种写xml文件
直接这样就能够调用这个动画了
image.setImageResource(R.drawable.anim_list);
里面的参数就是你写的xml内容以下:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:drawable="@drawable/one"
        android:duration="500"/>
    <item
        android:drawable="@drawable/two"
        android:duration="500"/>
    <item
        android:drawable="@drawable/three"
        android:duration="500"/>
    <item
        android:drawable="@drawable/four"
        android:duration="500"/>
    <item
        android:drawable="@drawable/five"
        android:duration="500"/>
    <item
        android:drawable="@drawable/six"
        android:duration="500"/>

</animation-list>

 


你执行的时候就会按上面图片的顺序一直切换播放的了。


好告终束了


若是有什么错误,或者我理解错误或不当的,恳请你们纠正,谢谢!嘻嘻嘻~
相关文章
相关标签/搜索