欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android动画之补间动画

程序员文章站 2022-06-15 12:37:45
...


所谓的补间动画,就是补全两个不同图片中缺失的过程.
比说一个图片的尺寸是100100 ,另一个是200200. 那么100到200这个放大的过程就可以用补间动画来实现.

xml的创建动画

准备

首先在res文件夹下创建anim动画文件夹
android动画之补间动画
在anim文件夹创建使用的动画文件

旋转动画

1, 动画xml文件

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromDegrees="0"
    android:toDegrees="90"
    android:fillAfter="true"
    android:interpolator="@android:anim/linear_interpolator">
    >

    <!--通用属性说明
     duration     动画持续时间
     fromDegrees  角度 (从左上角开始)

     fillAfter    用于确定是否保持动画结束时的值,如果设置为true,控件动画结束时,将保持动画
     interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等。
     -->

</rotate>

2,代码

 btn0.setOnClickListener((v) -> {
 //loadAnimation 的两个参数,1是上下文,2是动画xml文件
            RotateAnimation rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(this, R.anim.rotate_img);
            //可以给任意控件加入动画,此处img是ImageView.
            img.startAnimation(rotateAnimation);
        });

平移动画

1, xml文件

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromYDelta="0"
    android:toYDelta="200%"
    android:fillAfter="true"
    android:interpolator="@android:anim/linear_interpolator">

    <!-- 
    fromYDelta Y轴的移动方向
    % 代表自己的大小的倍数
    -->
</translate>

2, 代码

TranslateAnimation translateAnimation = (TranslateAnimation) AnimationUtils.loadAnimation(this, R.anim.translate_img);
            img.startAnimation(translateAnimation);

透明度(渐变)

1, xml文件

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromAlpha="0.1"
    android:toAlpha="1"
    android:fillAfter="true">
    
    <!-- 
        fromAlpha 透明度变化 1是完全不透明
    -->
    
    
</alpha>

2, 代码

AlphaAnimation alphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(this, R.anim.alpha_img);
            img.startAnimation(alphaAnimation);

缩放

1, xml文件

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fillAfter="true"
    android:fromXScale="1"
    android:toXScale="2"
    android:pivotX="0"
    android:pivotY="0"
    android:fromYScale="1"
    android:toYScale="2"

    >
    
    <!-- 相同属性省略
    pivotX 缩放起点 x 轴
    fromXScale x轴上的缩放
    toXScale 结束后x轴上的缩放
    -->

</scale>

2, 代码

btn3.setOnClickListener((v) -> {
            ScaleAnimation scaleAnimation = (ScaleAnimation) AnimationUtils.loadAnimation(this, R.anim.scale_img);
            img.startAnimation(scaleAnimation);
        });

java代码中创建动画

在java中创建动画的意思就是直接new 动画的对象,根据构造填上需要的参数即可.
大多属性都相同,一个能用.另外一个也能用.比如:耗时,重复次数等.

旋转动画

			//
			RotateAnimation rotateAnimation = new RotateAnimation(0, 90, 0, 0);
            rotateAnimation.setDuration(1000);
            translateAnimation.setRepeatCount(1);//重复次数
            rotateAnimation.setFillAfter(true);
            rotateAnimation.setAnimationListener(new Animation.AnimationListener() {
                //开始
                @Override
                public void onAnimationStart(Animation animation) {

                }

                //结束
                @Override
                public void onAnimationEnd(Animation animation) {

                }

                //重复
                @Override
                public void onAnimationRepeat(Animation animation) {

                }
            });

            img.startAnimation(rotateAnimation);

平移动画

  TranslateAnimation translateAnimation = new TranslateAnimation(0, img.getMaxWidth(), 0, img.getMaxHeight());
            translateAnimation.setDuration(1000);
            translateAnimation.setFillAfter(true);
            translateAnimation.setRepeatCount(1);//重复次数
            translateAnimation.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {
                    
                }

                @Override
                public void onAnimationEnd(Animation animation) {

                }

                @Override
                public void onAnimationRepeat(Animation animation) {

                }
            });
            img.startAnimation(translateAnimation);

透明度

AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1f);
            alphaAnimation.setDuration(1000);
            alphaAnimation.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {

                }

                @Override
                public void onAnimationEnd(Animation animation) {

                }

                @Override
                public void onAnimationRepeat(Animation animation) {

                }
            });

            img.startAnimation(alphaAnimation);

缩放

ScaleAnimation scaleAnimation = new ScaleAnimation(1, 2, 1, 2);
            scaleAnimation.setDuration(2000);
            scaleAnimation.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {

                }

                @Override
                public void onAnimationEnd(Animation animation) {

                }

                @Override
                public void onAnimationRepeat(Animation animation) {

                }
            });
            img.startAnimation(scaleAnimation);
相关标签: Android从零开始