Animations的使用方法

薛兴言
2023-12-01

Animations的使用方法

使用Animations的步骤:

1.创建一个AnimationSet对象(Animation子类);

2.增加需要创建相应的Animation对象;

3.更加项目的需求,为Animation对象设置相应的数据;

4.Animatin对象添加到AnimationSet对象当中;

5.使用控件对象开始执行AnimationSet


Animations的分类
  1、Alpha:淡入淡出效果
  2、Scale:缩放效果
  3、Rotate:旋转效果
  4、Translate:移动效果

具体实现

1、activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="com.zhang.myanimation.MainActivity">

    <ImageView
        android:id="@+id/image1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/animation"
        tools:layout_editor_absoluteX="67dp"
        tools:layout_editor_absoluteY="7dp" />

    <ImageView
        android:id="@+id/image2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/image1"
        android:layout_alignStart="@+id/image1"
        android:layout_below="@+id/bt_touming"
        android:src="@drawable/g1"
        tools:layout_editor_absoluteX="67dp"
        tools:layout_editor_absoluteY="157dp" />

    <Button
        android:id="@+id/bt_touming"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:text="透明"
        tools:layout_editor_absoluteX="16dp"
        tools:layout_editor_absoluteY="310dp" />

    <Button
        android:id="@+id/bt_xuanzhuan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/bt_touming"
        android:layout_toRightOf="@+id/bt_touming"
        android:text="旋转"
        tools:layout_editor_absoluteX="102dp"
        tools:layout_editor_absoluteY="310dp" />

    <Button
        android:id="@+id/bt_suofang"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/bt_xuanzhuan"
        android:layout_toRightOf="@+id/bt_xuanzhuan"

        android:text="缩放"
        tools:layout_editor_absoluteX="190dp"
        tools:layout_editor_absoluteY="310dp" />

    <Button
        android:id="@+id/bt_pingyi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/bt_suofang"
        android:layout_toRightOf="@+id/bt_suofang"

        android:text="平移"
        tools:layout_editor_absoluteX="278dp"
        tools:layout_editor_absoluteY="310dp" />

    <Button
        android:id="@+id/bt_donghuaji"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/image2"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:text="动画集" />

</RelativeLayout>



2.XML中实现动画方式

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!--缩放动画-->
    <!--android:fromXScale 起始的 X 方向上相对自身的缩放比例,浮点值,比如 1.0 代表自身无变化,0.5 代表起始时缩小一倍,2.0 代表放大一倍;
    android:toXScale 结尾的 X 方向上相对自身的缩放比例,浮点值;
    android:fromYScale 起始的 Y 方向上相对自身的缩放比例,浮点值,
    android:toYScale 结尾的 Y 方向上相对自身的缩放比例,浮点值;
    android:pivotX 缩放起点 X 轴坐标,可以是数值、百分数、百分数 p 三种样式,比如 50、50%、50%p,
    当为数值时,表示在当前 View 的左上角,即原点处加上 50px,做为起始缩放点;如果是 50%,表示在当前控件的左上角加上自己宽度的 50%做为起始点;
    如果是 50%p,那么就是表示在当前的左上角加上父控件宽度的 50%做为起始点 x 轴坐标。(具体意义,后面会举例演示)
    android:pivotY 缩放起点 Y 轴坐标,取值及意义跟 android:pivotX 一样。 放到代码中,ScaleAnimation 有下面几个构造函数:
    android:duration="700" 动画持续时间
    -->
    <scale
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="2.0"
        android:toYScale="2.0"
        android:duration="700"
        >

    </scale>

</set>

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <!-- android:fromXDelta 起始点 X 轴坐标,可以是数值、百分数、百分数 p 三种样式,比如 50、50%、50%p,具体意义已在 scale 标签中讲述,这里就不再重讲
    android:fromYDelta 起始点 Y 轴从标,可以是数值、百分数、百分数 p 三种样式;
    android:toXDelta 结束点 X 轴坐标
    android:toYDelta 结束点 Y 轴坐标 这些属性所对应的构造函数为:
    TranslateAnimation(Context context, AttributeSet attrs) 同样,基本不用
    TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
    TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)
    由于 fromXDelta、fromYDelta、toXDelta、toYDelta 这三个属性都具有三种状态,所以在构造函数中,最理想的状态就是第三个构造函数,
    能够指定每个值的类型,第二个构造函数:TranslateAnimation (float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
    使用是绝对数值。只有最后一个构造函数可以指定百分数和相对父控件的百分数。-->
<translate
    android:fromXDelta="0"
    android:toXDelta="0"
    android:fromYDelta="0"
    android:toYDelta="360"
    android:duration="2000"
    android:fillBefore="true"
    >

</translate>
</set>

3.java代码


package com.zhang.myanimation;

import android.graphics.drawable.AnimationDrawable;
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.AnimationSet;
import android.view.animation.AnimationUtils;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    ImageView imageView, imageView2;
    Button bt_touming, bt_xuanzhuan, bt_suofang, bt_pingyi, bt_donghuaji;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //关联控件
        intView();

        //帧动画
        AnimationDrawable mation = (AnimationDrawable) imageView.getDrawable();
        mation.start();

        //t透明监听
        bt_touming.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myAlphaAnimation();
            }
        });
        //缩放监听
        bt_suofang.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                scale_xml缩放效果();
            }
        });
        //平移监听
        bt_pingyi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                translate_xml移动效果();
            }
        });
        //动画集监听
        bt_donghuaji.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                补间动画集();
            }
        });

    }

    /**
     * 透明
     */
    private void myAlphaAnimation() {
        /**
         * float fromAlpha :  开始的透明度
         float toAlpha :  结束的透明度
         取值:0~1之间的小数
         1.0:完全不透明
         0.0:完全透明*/
        AlphaAnimation aa = new AlphaAnimation(1.0f, 0.5f);
        aa.setDuration(2000);//ms:毫秒  该动画的变化过程将会在2s中内完成
        aa.setFillAfter(true);//动画效果结束后 保持当前效果
        /**重复的个数*/
        aa.setRepeatCount(1);
        /**
         * 重复的模式
         * Animation.RESTART:重新开始
         * Animation.REVERSE:反向*/
        aa.setRepeatMode(Animation.REVERSE);
        /**开始动画*/
        imageView2.startAnimation(aa);
    }

    //关联控件
    public void intView() {
        imageView = (ImageView) findViewById(R.id.image1);
        imageView2 = (ImageView) findViewById(R.id.image2);
        bt_touming = (Button) findViewById(R.id.bt_touming);
        bt_xuanzhuan = (Button) findViewById(R.id.bt_xuanzhuan);
        bt_suofang = (Button) findViewById(R.id.bt_suofang);
        bt_pingyi = (Button) findViewById(R.id.bt_pingyi);
        bt_donghuaji = (Button) findViewById(R.id.bt_donghuaji);

    }

    //补间动画集
    public void 补间动画集() {
        /**
         * 动画集合类:AnimationSet*/

        //移动动画效果
        TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0,
                Animation.RELATIVE_TO_PARENT, 0,
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.5f);
        ta.setDuration(2000);
        //伸缩动画效果
        ScaleAnimation sa = new ScaleAnimation(1.0f, 2.0f, 1.0f, 2.0f,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        sa.setDuration(2000);
        //旋转动画效果
        RotateAnimation ra = new RotateAnimation(90.0f, -180.0f, Animation.RELATIVE_TO_SELF, 0.5f
                , Animation.RELATIVE_TO_SELF, 0.5f);
        ra.setDuration(2000);
        //透明度动画效果
        AlphaAnimation aa = new AlphaAnimation(1.0f, 0.5f);
        aa.setDuration(2000);//ms:毫秒  该动画的变化过程将会在2s中内完成

        AnimationSet as = new AnimationSet(true);
        as.addAnimation(ta);
        as.addAnimation(sa);
        as.addAnimation(ra);
        as.addAnimation(aa);
        imageView2.startAnimation(as);

    }

    public void scale_xml缩放效果() {

        Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale);
        imageView2.startAnimation(animation);

    }
    public void translate_xml移动效果(){
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.translate);
        imageView2.startAnimation(animation);

    }
}

Animations的通用方法

  1、setDuration(long durationMills)
  设置动画持续时间(单位:毫秒)
  2、setFillAfter(Boolean fillAfter)
  如果fillAfter的值为true,则动画执行后,控件将停留在执行结束的状态
  3、setFillBefore(Boolean fillBefore)
  如果fillBefore的值为true,则动画执行后,控件将回到动画执行之前的状态
  4、setStartOffSet(long startOffSet)
  设置动画执行之前的等待时间
  5、setRepeatCount(int repeatCount)
  设置动画重复执行的次数

引用文章:




http://www.360doc.com/content/13/0102/22/6541311_257754535.shtml
 类似资料: