Android 动画Animation

动画Animation

有两种加载方式:

       一:再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(平移)四种基本的动画

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

               同样的相应类的名称AlphaAnmation, RotateAnmation, ScaleAnmation, TranslateAnmation

 

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

透明度动画:

<?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>

旋转动画:

<?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>

 


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


好了结束了


如果有什么错误,或者我理解错误或不当的,恳请大家纠正,谢谢!嘻嘻嘻~

 

posted on 2017-03-23 21:21  艹艹哒丶  阅读(512)  评论(0编辑  收藏  举报

导航