属性动画步骤总结——包含xml实现与java代码实现

package com.oldeleven.day18_propertyanimatorfirst;

import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;

import java.util.ArrayList;
import java.util.List;


/**
 * 第一步:在activity_main.xml文件中线性布局,其中包含两个水平的LinearLayout和一个imageView空间
 * 其中,连个水平的线性布局中各包含5个按钮,用于实现  透明(alpha) 旋转(rotation)  缩放(scale)
 * 平移(translation)  集合(set)功能
 * 第一行按钮:使用Xml资源文件的方式实现
 * 第二行按钮:使用java代码的方式实现功能
 *
 * 方法一:属性动画————使用Xml资源方式实现
 * propertyName:
 * alpha.xml -- alpha  rotate.xml -- rotation scale.xml -- scaleX scaleY
 * translate.xml -- translationX  translationY
 * xml文件格式:
 * alpha.xml -- <objectAnimator  写属性/>
 * rotate.xml -- <objectAnimator 写属性/>
 * scale.xml --<set> <objectAnimator  scaleX/> <objectAnimator scaleY/></set>
 *
 * java代码:
 * 对于 alpha.xml  rotate.xml
 * ObjectAnimator animator_XXX_xml = (ObjectAnimator) AnimatorInflater.loadAnimator(mContext, R.animator.XXX);
 * 对于 scale.xml translate.xml
 * AnimatorSet animator_XXX_xml = (AnimatorSet) AnimatorInflater.loadAnimator(mContext, R.animator.XXX);
 *启动动画
 * animator_XXX_xml.start();
 *
 * 方法二、使用java代码实现相同的功能
 *对于 alpha,rotate,scale,translate.xml
 * 都是: ObjectAnimator animator = ObjectAnimator.ofFloat();
 *    animator.setXXX();
 *    animator.start();
 * 对于set来说
 * 第一步: AnimatorSet  animatorSet  = new AnimatorSet();
 * 第二步:ObjectAnimator animator = ObjectAnimator.ofFloat();
 *       animator.setXXX();
 * 第三步:创建List集合  list<Animator> list = new ArrayList<>();
 *                    list.add(animator);
 *                    ....
 * 第四部:设置动画的执行顺序Sequentially--按顺序的,Together---同步执行
 *     animatorSet.playSequentially(list);
 *     或者animatorSet.playTogether(list);
 * 第五步:启动动画
 *     animatorSet.start();
 *
 *
 *
 */
public class MainActivity extends AppCompatActivity {
    private Context mContext = this;
    private ImageView imageView_main_show;

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

    private void initView() {
        imageView_main_show = (ImageView) findViewById(R.id.imageView_main_show);

    }

    public void clickView(View view) {
        switch (view.getId()) {
            //使用资源文件写属性动画
            case R.id.button_alpha_xml:
                ObjectAnimator animator_alpha_xml = (ObjectAnimator) AnimatorInflater.loadAnimator(mContext, R.animator.alpha);
                animator_alpha_xml.setTarget(imageView_main_show);
                animator_alpha_xml.start();

                break;
            case R.id.button_rotate_xml:
              ObjectAnimator animator_rotate_xml = (ObjectAnimator) AnimatorInflater.loadAnimator(mContext,R.animator.rotate);
                animator_rotate_xml.setTarget(imageView_main_show);
                animator_rotate_xml.start();
                break;
            case R.id.button_scale_xml:
                AnimatorSet animator_scale_xml = (AnimatorSet) AnimatorInflater.loadAnimator(mContext,R.animator.scale);
                animator_scale_xml.setTarget(imageView_main_show);
                animator_scale_xml.start();
                break;
            case R.id.button_translate_xml:
                AnimatorSet animtor_translate_xml = (AnimatorSet) AnimatorInflater.loadAnimator(mContext,R.animator.translate);
                animtor_translate_xml.setTarget(imageView_main_show);
                animtor_translate_xml.start();

                break;
            case R.id.button_set_xml:
                AnimatorSet animator_set_xml = (AnimatorSet) AnimatorInflater.loadAnimator(mContext,R.animator.set_animator);
                animator_set_xml.setTarget(imageView_main_show);
                animator_set_xml.start();
                break;

            //java代码写属性动画
            case R.id.button_alpha:
                ObjectAnimator animator_alpha = ObjectAnimator.ofFloat(imageView_main_show, "alpha", 1.0f, 0.0f);
                animator_alpha.setRepeatMode(ValueAnimator.REVERSE);
                animator_alpha.setRepeatCount(ValueAnimator.INFINITE);
                animator_alpha.setDuration(3000);
                animator_alpha.start();


                break;
            case R.id.button_rotate:
                ObjectAnimator animator_rotate = ObjectAnimator.ofFloat(imageView_main_show,"rotation",0,360);
                animator_rotate.setDuration(3000);
                animator_rotate.setRepeatCount(ValueAnimator.INFINITE);
                animator_rotate.setRepeatMode(ValueAnimator.REVERSE);
                animator_rotate.start();

                break;
            case R.id.button_scale:
                ObjectAnimator animator_scaleX = ObjectAnimator.ofFloat(imageView_main_show,"scaleX",0,2.0f);
                animator_scaleX.setDuration(3000);
                animator_scaleX.setRepeatCount(ValueAnimator.INFINITE);
                animator_scaleX.setRepeatMode(ValueAnimator.REVERSE);
                animator_scaleX.start();

                ObjectAnimator animator_scaleY = ObjectAnimator.ofFloat(imageView_main_show,"scaleY",0,2.0f);
                animator_scaleY.setDuration(4000);
                animator_scaleY.setRepeatCount(ValueAnimator.INFINITE);
                animator_scaleY.setRepeatMode(ValueAnimator.REVERSE);
                animator_scaleY.start();

                break;
            case R.id.button_translate:
                ObjectAnimator animator_translateX = ObjectAnimator.ofFloat(imageView_main_show,"translationX",0,-100);
                ObjectAnimator animator_translateY = ObjectAnimator.ofFloat(imageView_main_show,"translationY",0,300);

                animator_translateX.setDuration(2000);
                animator_translateX.setRepeatCount(ValueAnimator.INFINITE);
                animator_translateX.setRepeatMode(ValueAnimator.REVERSE);
                animator_translateX.start();

                animator_translateY.setDuration(2000);
                animator_translateY.setRepeatCount(ValueAnimator.INFINITE);
                animator_translateY.setRepeatMode(ValueAnimator.REVERSE);
                animator_translateY.start();


                break;
            case R.id.button_set:
                AnimatorSet animatorSet = new AnimatorSet();

                ObjectAnimator animator_translateX1 = ObjectAnimator.ofFloat(imageView_main_show,"translationX",0,100);
                ObjectAnimator animator_translateY1 = ObjectAnimator.ofFloat(imageView_main_show,"translationY",0,300);
                ObjectAnimator animator_translateX2 = ObjectAnimator.ofFloat(imageView_main_show,"translationX",100,0);
                ObjectAnimator animator_translateY2 = ObjectAnimator.ofFloat(imageView_main_show,"translationY",300,0);

                List<Animator> list = new ArrayList<>();
                list.add(animator_translateX1);
                list.add(animator_translateY1);
                list.add(animator_translateX2);
                list.add(animator_translateY2);

//                animatorSet.playSequentially(list);
                animatorSet.playTogether(list);
                animatorSet.start();

                break;


        }

    }
}

用XML代码实现的动画如下:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"

                android:duration="3000"
                android:propertyName="alpha"
                android:repeatCount="infinite"
                android:repeatMode="reverse"
                android:valueFrom="1.0f"
                android:valueTo="0.0"
                android:valueType="floatType"
    >

</objectAnimator>
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
                android:duration="3000"
                android:propertyName="rotation"
                android:repeatCount="infinite"
                android:repeatMode="reverse"
                android:valueFrom="0"
                android:valueTo="360"
                android:valueType="floatType">

</objectAnimator>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:ordering="together">

    <objectAnimator
        android:duration="3000"
        android:propertyName="scaleX"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="2.0"
        android:valueType="floatType"/>

    <objectAnimator
        android:duration="3000"
        android:propertyName="scaleY"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="2.0"
        android:valueType="floatType"/>

</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:ordering="together">

    <objectAnimator
        android:duration="3000"
        android:propertyName="translationX"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="200"
        android:valueType="floatType"/>

    <objectAnimator
        android:duration="3000"
        android:propertyName="translationY"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:valueFrom="0"
        android:valueTo="100"
        android:valueType="floatType"/>

</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially" >

    <objectAnimator
        android:duration="3000"
        android:propertyName="translationX"
        android:valueFrom="0"
        android:valueTo="200"
        android:interpolator="@android:anim/bounce_interpolator"
        android:valueType="floatType" />
    <objectAnimator
        android:duration="3000"
        android:propertyName="translationY"
        android:valueTo="200"
        android:interpolator="@android:anim/bounce_interpolator"
        android:valueType="floatType" />
    <objectAnimator
        android:duration="3000"
        android:propertyName="translationX"
        android:valueTo="0"
        android:interpolator="@android:anim/bounce_interpolator"
        android:valueType="floatType" />
    <objectAnimator
        android:duration="3000"
        android:propertyName="translationY"
        android:valueTo="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:valueType="floatType" />

</set>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值