Android的动画可以分为三种:View动画、帧动画和属性动画。
    View动画通过对场景里的对象不断做图像变换(平移、缩放、旋转、透明度)从而产生动画效果,View动画支持自定义
    帧动画通过顺序播放一系列图像从而产生动画效果。

    属性动画通过动态改变对象的属性从而达到动画效果。

android动画

属性动画是3.0之后新加入的,它和view动画的最大区别就是view是移动了,但没改变原view的位置,而

objiectAnimator改变了组件的位置.

下面附一些代码:

view动画

package com.example.view_animation;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;

public class Main3Activity extends AppCompatActivity implements View.OnClickListener {

    
    private ImageView ima_view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        initView();
    }

    private void initView() {
        ima_view = (ImageView) findViewById(R.id.ima_view);
        ima_view.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.tras_btn:
                tras_btn();//平移
                break;
            case R.id.roat_btn:
                roat_btn();//旋转
                break;
            case R.id.sca_btn:
                sca_btn();//缩放
                break;
            case R.id.alph_btn:
                alph_btn();
                break;
        }
    }
    //透明
    private void alph_btn() {
        AlphaAnimation alph=new AlphaAnimation(1,0);
        alph.setDuration(2000);
        //还原
        alph.setFillBefore(true);
        ima_view.startAnimation(alph);
    }
    //缩放
    private void sca_btn() {
        //缩放的本身比例的起始宽度到缩放后本身比例的宽度
        ScaleAnimation scale=new ScaleAnimation(0.5f,1f,0,1,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
        scale.setDuration(2000);
        //还原
        scale.setFillBefore(true);
        ima_view.startAnimation(scale);
    }

    //旋转
    private void roat_btn() {
        //初始角度到旋转的角度 绕的位置的点
        RotateAnimation roate=new RotateAnimation(0,360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
        //持续
        roate.setDuration(5000);
        //还原
        roate.setFillBefore(true);
        ima_view.startAnimation(roate);
    }

    //平移
    private void tras_btn() {
        //初始位置到移动后位置
        TranslateAnimation translate = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.RELATIVE_TO_SELF, 1, Animation.ABSOLUTE, 0, Animation.RELATIVE_TO_SELF, 1);
        //持续
        translate.setDuration(2000);
        //还原
        translate.setFillBefore(true);
        ima_view.startAnimation(translate);
    }
}

帧动画  就是我们所看到的动图的样式

package com.example.view_animation;

import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class Main4Activity extends AppCompatActivity implements View.OnClickListener {

    private Button start_btn;
    private Button stop_btn;
    private AnimationDrawable animationDrawable;
    private ImageView ima_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);
        initView();
    }

    private void initView() {
        start_btn = (Button) findViewById(R.id.start_btn);
        stop_btn = (Button) findViewById(R.id.stop_btn);

        start_btn.setOnClickListener(this);
        stop_btn.setOnClickListener(this);
        ima_btn = (ImageView) findViewById(R.id.ima_btn);
        ima_btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.start_btn:
                if (animationDrawable == null) {
                    animationDrawable = (AnimationDrawable) ima_btn.getBackground();
                    animationDrawable.start();
                }
                break;
            case R.id.stop_btn:
                if (animationDrawable != null) {
                    animationDrawable = new AnimationDrawable();
                    animationDrawable.stop();
                }
                break;
        }
    }
}
注意一下,这里的图片的背景设置的是一个animation-list
图片也必须按顺序放置,以防顺序播放错乱
接下来就是熟悉动画
package com.example.view_animation;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.animation.ValueAnimator;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.LayoutAnimationController;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private LinearLayout activity_main;
    private ImageView image_main;
    private View include_main;
    private TextView text_view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text_view= (TextView) findViewById(R.id.text_view);
        initView();
    }

    private void initView() {
        activity_main = (LinearLayout) findViewById(R.id.activity_main);
        image_main= (ImageView) findViewById(R.id.image_main);
        include_main=findViewById(R.id.include_main);
        activity_main= (LinearLayout) findViewById(R.id.activity_main);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.translate_btn:
                translate_btn();
                break;
            case R.id.scale_btn:
                scale_btn();
                break;
            case R.id.rotate_btn:
                rotate_btn();
                break;
            case R.id.alpha_btn:
                alpha_btn();
                break;
            case R.id.protranslate_btn:
                protranslate_btn();
                break;
           
        }
    }

   
    

    private void protranslate_btn() {
        PropertyValuesHolder propertyValuesHolder=PropertyValuesHolder.ofFloat("translationX",360f);
        ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(image_main, propertyValuesHolder);
        objectAnimator.setDuration(2000);
        objectAnimator.setRepeatCount(1);
        objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
        objectAnimator.start();

    }

    //透明度
    private void alpha_btn() {
        ObjectAnimator alphax=ObjectAnimator.ofFloat(image_main,"alpha",new float[]{0.1f,0.5f,0.8f,1f});
        alphax.setDuration(1000);
        alphax.setRepeatCount(-1);
        alphax.setRepeatMode(ObjectAnimator.REVERSE);
        alphax.start();
    }


    //旋转
    private void rotate_btn() {
        //Y轴的上下旋转
        ObjectAnimator rotatey=ObjectAnimator.ofFloat(include_main,"rotation",new float[]{-90,0,90});
        include_main.setPivotX(include_main.getWidth()/2);
        include_main.setPivotY(0);
        rotatey.setDuration(2000);
        rotatey.setRepeatCount(-1);
        rotatey.setRepeatMode(ObjectAnimator.REVERSE);
        

//        //X轴左右旋转
//        ObjectAnimator rotatex=ObjectAnimator.ofFloat(image_main,"rotationX",new float[]{0f,45f,90,90f,135f,180f});
//        rotatex.setDuration(2000);
//        rotatex.setRepeatCount(-1);
//        rotatex.setRepeatMode(ObjectAnimator.REVERSE);
//        rotatex.start();
        rotatey.start();
    }

    //缩放
    private void scale_btn() {
        //Y轴缩放
        ObjectAnimator scaley=ObjectAnimator.ofFloat(image_main,"scaleY",new float[]{0.2f,0.5f,0.8f,1f,1.2f});
        //持续
        scaley.setDuration(2000);
        //执行几次 -1是无限
        scaley.setRepeatCount(-1);
        //倒着再来一次
        scaley.setRepeatMode(ObjectAnimator.REVERSE);
        //X轴缩放
        ObjectAnimator scalex=ObjectAnimator.ofFloat(image_main,"scaleX",new float[]{0.2f,0.5f,0.8f,1f,1.2f});
        scalex.setDuration(2000);
        scalex.setRepeatCount(-1);
        scalex.setRepeatMode(ObjectAnimator.REVERSE);
//        scalex.start();
//        scaley.start();
        AnimatorSet animatorSet=new AnimatorSet();
        animatorSet.playTogether(scalex,scaley);
    }

    //平移
    private void translate_btn() {
        ObjectAnimator translatex=ObjectAnimator.ofFloat(image_main,"translationX",new float[]{10f,20f,30f,50f,80f,100f});
        ObjectAnimator translatey=ObjectAnimator.ofFloat(image_main,"translationY",new float[]{10f,20f,30f,50f,80f,100f});
        translatex.setDuration(3000);
        translatey.setDuration(3000);
        translatex.setRepeatCount(-1);
        translatey.setRepeatCount(-1);
        translatex.setRepeatMode(ObjectAnimator.REVERSE);
        translatey.setRepeatMode(ObjectAnimator.REVERSE);
        translatex.start();
        translatey.start();
    }
}


相关文章:

  • 2021-08-18
猜你喜欢
  • 2021-05-08
  • 2022-01-08
  • 2021-06-13
  • 2021-08-25
  • 2022-01-10
相关资源
相似解决方案