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

Android 补间动画学习

程序员文章站 2022-03-05 15:32:30
Android 补间动画1.各种动画的详细讲解这里的android:duration都是动画的持续时间,单位是毫秒~———————————————————————————————————————(1)AlphaAnimation(透明度渐变)

Android 补间动画

1.各种动画的详细讲解

这里的android:duration都是动画的持续时间,单位是毫秒~

———————————————————————————————————————
(1)AlphaAnimation(透明度渐变)

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:toAlpha="0"
    android:duration="2000"/>
<!--    fromAlpha :起始透明度-->
<!--    toAlpha:结束透明度-->
<!--    透明度的范围为:0-1,完全透明-完全不透明-->

———————————————————————————————————————
(2)ScaleAnimation(缩放渐变)

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:fromXScale="0.2"
    android:toXScale="1.5"
    android:fromYScale="0.2"
    android:toYScale="1.5"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="2000"/>


<!--    fromXScale/fromYScale:沿着X/Y轴缩放的起始比例-->
<!--    toXScale/toYScale:沿着X/Y轴缩放的结束比例-->
<!--    pivotX/pivotY:缩放的中轴点X/Y坐标,即距离自身左边缘的位置,比如50%就是以图像的 中心为中轴点-->

———————————————————————————————————————
(3)TranslateAnimation(位移渐变)

<translate xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
    android:fromXDelta="0"  
    android:toXDelta="320"  
    android:fromYDelta="0"  
    android:toYDelta="0"  
    android:duration="2000"/>

<!--    fromDegrees/toDegrees:旋转的起始/结束角度-->
<!--    repeatCount:旋转的次数,默认值为0,代表一次,假如是其他值,比如3,则旋转4次 另外,值为-1或者infinite时,表示动画永不停止-->
<!--    repeatMode:设置重复模式,默认restart,但只有当repeatCount大于0或者infinite或-1时 才有效。还可以设置成reverse,表示偶数次显示动画时会做方向相反的运动!-->

———————————————————————————————————————
(4)RotateAnimation(旋转渐变)

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:duration="1000"
    android:repeatCount="infinite"
    android:repeatMode="reverse"/>

<!--    fromDegrees/toDegrees:旋转的起始/结束角度-->
<!--    repeatCount:旋转的次数,默认值为0,代表一次,假如是其他值,比如3,则旋转4次 另外,值为-1或者infinite时,表示动画永不停止-->
<!--    repeatMode:设置重复模式,默认restart,但只有当repeatCount大于0或者infinite或-1时 才有效。还可以设置成reverse,表示偶数次显示动画时会做方向相反的运动!-->

———————————————————————————————————————
(5)AnimationSet(组合渐变)
这个就是前面几个属性组合

<set  xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:shareInterpolator="true">
<alpha
    android:fromAlpha="1.0"
    android:toAlpha="0"
    android:duration="2000"/>

<rotate
   android:fromDegrees="0"
   android:toDegrees="360"
   android:duration="1000"
   android:repeatCount="infinite"
   android:repeatMode="reverse"/>
<!--    fromAlpha :起始透明度-->
<!--    toAlpha:结束透明度-->
<!--    透明度的范围为:0-1,完全透明-完全不透明-->
</set>

组合渐变可以使用set作为根节点
——————————————————————————————————————

2.实例体验

下面我们就用上面的动画来写个例子,先来写个布局页面

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_alpha"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="透明度渐变"/>
    <Button
        android:id="@+id/btn_scale"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="缩放渐变"/>
    <Button
        android:id="@+id/btn_translate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="位移渐变"/>
    <Button
        android:id="@+id/btn_rotate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="旋转渐变"/>

    <Button
        android:id="@+id/btn_alpha_rotate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="透明_旋转"/>
    <ImageView
        android:id="@+id/animate_imge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/icon_animation"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>

———————————————————————————————————————
好的,接着到我们的MainActivity.java,同样非常简单,只需调用AnimationUtils.loadAnimation() 加载动画,然后我们的View控件调用startAnimation开启动画即可~

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;


public class MainActivity extends AppCompatActivity {
    private Button alphaBtnOut,alphaBtnin,translateBtn,rotateBtn,alpharotateBtn,scaleBtn;
    private ImageView aniImg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        aniImg = findViewById(R.id.animate_imge);
         //透明度动画
         alphaBtnin = findViewById(R.id.btn_alpha_in);
         alphaBtnin.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
         Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_alpha_in);
         animation.setAnimationListener(new Animation.AnimationListener() {
          @Override
          public void onAnimationStart(Animation animation) {
          aniImg.setVisibility(View.VISIBLE);
          }

          @Override
          public void onAnimationEnd(Animation animation) {
          }

          @Override
          public void onAnimationRepeat(Animation animation) {

          }
      });
          aniImg.startAnimation(animation);
          }
      });
          //缩放动画
          scaleBtn = findViewById(R.id.btn_scale);
          scaleBtn.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
        
          Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_scale);
          aniImg.startAnimation(animation);
          animation.setAnimationListener(new Animation.AnimationListener() {
           @Override
           public void onAnimationStart(Animation animation) {

           }

           @Override
           public void onAnimationEnd(Animation animation) {

           }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
     }
  });
           //位移动画
           translateBtn = findViewById(R.id.btn_translate);
           translateBtn.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
           Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_translate);
           aniImg.startAnimation(animation);
           animation.setAnimationListener(new Animation.AnimationListener() {
           @Override
           public void onAnimationStart(Animation animation) {

           }

           @Override
           public void onAnimationEnd(Animation animation) {

           }

           @Override
           public void onAnimationRepeat(Animation animation) {

           }
        });
      }
    });
          //旋转动画
          rotateBtn = findViewById(R.id.btn_rotate);
          rotateBtn.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
          Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_rotate);
          aniImg.startAnimation(animation);
          animation.setAnimationListener(new Animation.AnimationListener() {
          @Override
          public void onAnimationStart(Animation animation) {

          }

          @Override
          public void onAnimationEnd(Animation animation) {

          }

          @Override
          public void onAnimationRepeat(Animation animation) {

          }
       });
     }
   });
   alpharotateBtn = findViewById(R.id.btn_alpha_rotate);
          alpharotateBtn.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
          Animation animation1
          =AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_alpha_rotate);
          aniImg.startAnimation(animation);
          animation.setAnimationListener(new Animation.AnimationListener() {
          @Override
          public void onAnimationStart(Animation animation) {

          }

          @Override
          public void onAnimationEnd(Animation animation) {

          }

          @Override
          public void onAnimationRepeat(Animation animation) {

          }
        });
      }
    });
  }
}

3.动画状态的监听

我们可以对动画的执行状态进行监听,调用动画对象的:

setAnimationListener(new AnimationListener())方法,重写下面的三个方法:
onAnimationStart():动画开始
onAnimtaionRepeat():动画重复
onAnimationEnd():动画结束
即可完成动画执行状态的监听~

总结

给大家讲解了下Android中的第二种动画(渐变动画),四种动画的详解,以及 设置动画监听器。

本文地址:https://blog.csdn.net/weixin_52859534/article/details/110211624

相关标签: 动画 android