您的位置:首页 > 编程语言 > Java开发

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

2016-07-18 20:15 465 查看
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_se
4000
t_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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: