Android中属性动画Property Animation使用示例(一)

MainActivity如下:

package cc.cn;

import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.animation.Animator.AnimatorListener;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewPropertyAnimator;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
 * Demo描述:
 * Android中属性动画Property Animation使用示例(一)
 *
 * 参考资料:
 * 1 http://blog.csdn.net/linmiansheng/article/details/18676845
 *   说明了关于View动画的缺陷,即引入Property Animation的必要性
 * 2 关于属性动画的中文文档,请参见:
 *   http://blog.csdn.net/think_soft/article/details/7703684
 *   http://wiki.eoeandroid.com/Property_Animation
 *   Thank you very much
 *
 */
public class MainActivity extends Activity {
	private Button mScaleXButton;
	private Button mScaleXYButton;
	private Button mTranslateXButton;
	private Button mAlphaButton;
	private Button mAnimatorSetByCodesButton;
	private Button mPropertyValuesHolderButton;
	private Button mViewPropertyAnimatorButton;
	private ObjectAnimator mObjectAnimator1;
	private ObjectAnimator mObjectAnimator2;
	private ObjectAnimator mObjectAnimator3;
	private AnimatorSet mAnimatorSet1;
	private AnimatorSet mAnimatorSet2;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }

    private void init(){
    	//--------->以下为在X方向上进行缩放的属性动画
    	mScaleXButton=(Button) findViewById(R.id.scaleXButton);
    	mScaleXButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				mObjectAnimator1.start();

			}
		});
    	mObjectAnimator1=(ObjectAnimator)AnimatorInflater.loadAnimator(this, R.animator.scalexanimator);
    	mObjectAnimator1.setTarget(mScaleXButton);

    	//--------->以下为在X和Y方向上进行缩放的属性动画
    	mScaleXYButton=(Button) findViewById(R.id.scaleXYButton);
    	mScaleXYButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				mAnimatorSet1.start();

			}
		});
    	mAnimatorSet1=(AnimatorSet)AnimatorInflater.loadAnimator(this, R.animator.setanimator);
    	mAnimatorSet1.setTarget(mScaleXYButton);

    	//--------->以下为在X方向上进行位移的属性动画
    	mTranslateXButton=(Button) findViewById(R.id.translateXButton);
    	mTranslateXButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				mObjectAnimator2.start();

			}
		});
    	mObjectAnimator2=(ObjectAnimator)AnimatorInflater.loadAnimator(this, R.animator.translatexanimator);
    	mObjectAnimator2.setTarget(mTranslateXButton);

    	//--------->以下为透明度变化的属性动画
    	mAlphaButton=(Button) findViewById(R.id.alphaButton);
    	mAlphaButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				mObjectAnimator3.start();

			}
		});
    	mObjectAnimator3=(ObjectAnimator)AnimatorInflater.loadAnimator(this, R.animator.alphaanimator);
    	mObjectAnimator3.setTarget(mAlphaButton);

    	//--------->以下为在代码中实现AnimatorSet
    	mAnimatorSetByCodesButton=(Button) findViewById(R.id.animatorSetByCodesButton);
    	mAnimatorSetByCodesButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				mAnimatorSet2.start();

			}
		});
    	mAnimatorSet2=new AnimatorSet();
    	//设置动画
    	mAnimatorSet2.playTogether(
    			ObjectAnimator.ofFloat(mAnimatorSetByCodesButton, "alpha", 1,0,1),
    			ObjectAnimator.ofFloat(mAnimatorSetByCodesButton, "translationX", 0f,400f,0f),
    			ObjectAnimator.ofFloat(mAnimatorSetByCodesButton, "translationY", 0f,400f,0f),
    			ObjectAnimator.ofFloat(mAnimatorSetByCodesButton, "rotation", 0,180,360)
    	);
    	//设置动画时间
    	mAnimatorSet2.setDuration(2000);
    	//设置动画监听
    	mAnimatorSet2.addListener(new AnimatorListener() {

			@Override
			public void onAnimationStart(Animator animator) {
				System.out.println("---> onAnimationStart");
			}

			@Override
			public void onAnimationRepeat(Animator animator) {
				System.out.println("---> onAnimationRepeat");
			}

			@Override
			public void onAnimationEnd(Animator animator) {
				System.out.println("---> onAnimationEnd");
			}

			@Override
			public void onAnimationCancel(Animator animator) {
				System.out.println("---> onAnimationCancel");
			}
		});

    	//在代码中要实现一个对象不同属性的动画效果,除了AnimatorSet外
    	//还可利用PropertyValuesHolder和ViewPropertyAnimator对象来实现
    	//--------->以下为在代码中利用PropertyValuesHolder实现类似AnimatorSet的效果
    	mPropertyValuesHolderButton=(Button) findViewById(R.id.propertyValuesHolderButton);
    	PropertyValuesHolder propertyValuesHolderX=PropertyValuesHolder.ofFloat("translationX", 0f,200f);
    	PropertyValuesHolder propertyValuesHolderY=PropertyValuesHolder.ofFloat("translationY", 0f,200f);
    	final ObjectAnimator objectAnimator
    	=ObjectAnimator.ofPropertyValuesHolder(mPropertyValuesHolderButton, propertyValuesHolderX, propertyValuesHolderY);
    	objectAnimator.setDuration(2000);
    	mPropertyValuesHolderButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				objectAnimator.start();
			}
		});

    	//在代码中要实现一个对象不同属性的动画效果,除了AnimatorSet外
    	//还可利用PropertyValuesHolder和ViewPropertyAnimator对象来实现
    	//--------->以下为在代码中利用ViewPropertyAnimator实现类似AnimatorSet的效果
    	mViewPropertyAnimatorButton=(Button) findViewById(R.id.viewPropertyAnimatorButton);
    	mViewPropertyAnimatorButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(final View v) {
				ViewPropertyAnimator viewPropertyAnimator=mViewPropertyAnimatorButton.animate();
				//位移
		    	viewPropertyAnimator.translationX(100f);
		    	//透明度
		    	viewPropertyAnimator.alpha(0.5f);
		    	//监听
		    	viewPropertyAnimator.setListener(new AnimatorListenerAdapter() {
		    		@Override
					public void onAnimationStart(Animator animation) {
						super.onAnimationStart(animation);
					}
		    		@Override
					public void onAnimationCancel(Animator animation) {
						super.onAnimationCancel(animation);
					}

					@Override
					public void onAnimationRepeat(Animator animation) {
						super.onAnimationRepeat(animation);
					}
					@Override
		    		public void onAnimationEnd(Animator animator){
						//动画结束后将其透明度和位置还原
						v.animate().alpha(1).translationX(0);
		    		}
		    	});
				viewPropertyAnimator.start();

			}
		});

    }
}

main.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/scaleXButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="100dip"
        android:text="scaleXButton" />

    <Button
        android:id="@+id/scaleXYButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="100dip"
        android:text="scaleXYButton" />

    <Button
        android:id="@+id/translateXButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="100dip"
        android:text="translateXButton" />

    <Button
        android:id="@+id/alphaButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="100dip"
        android:text="alphaButton" />

    <Button
        android:id="@+id/animatorSetByCodesButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="100dip"
        android:text="AnimatorSetByCodesButton" />

     <Button
        android:id="@+id/propertyValuesHolderButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="100dip"
        android:text="PropertyValuesHolderButton" />

      <Button
        android:id="@+id/viewPropertyAnimatorButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="100dip"
        android:text="ViewPropertyAnimatorButton" />

</LinearLayout>

alphaanimator.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="alpha"
    android:duration="2500"
    android:valueFrom="1.0"
    android:valueTo="0"
    android:repeatCount="1"
    android:repeatMode="reverse">
</objectAnimator>

scalexanimator.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="scaleX"
    android:duration="3000"
    android:valueFrom="1.0"
    android:valueTo="2.0"
    android:repeatCount="1"
    android:repeatMode="reverse"
     >

</objectAnimator>

setanimator.xml如下:

<?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="1"
        android:repeatMode="reverse"
        android:valueFrom="1.0"
        android:valueTo="2.0" >
    </objectAnimator>

    <objectAnimator
        android:duration="3000"
        android:propertyName="scaleY"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:valueFrom="1.0"
        android:valueTo="2.0" >
    </objectAnimator>

</set>

translatexanimator.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="translationX"
    android:duration="2000"
    android:valueFrom="0"
    android:valueTo="150"
    android:repeatCount="1"
    android:repeatMode="reverse">
</objectAnimator>
时间: 2024-11-08 17:41:19

Android中属性动画Property Animation使用示例(一)的相关文章

Android中属性动画Property Animation使用示例(四)

MainActivity如下: package cc.cn; import android.animation.AnimatorInflater; import android.animation.IntEvaluator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateLis

Android中属性动画Property Animation使用示例(三)

MainActivity如下: package cc.cn; import android.os.Bundle; import android.view.View; import android.widget.RelativeLayout; import android.animation.AnimatorInflater; import android.animation.ArgbEvaluator; import android.animation.ObjectAnimator; impor

android中的动画可以改变一个view的高和宽吗?

问题描述 android中的动画可以改变一个view的高和宽吗? 简单点说把,就是在android中通过动画可以改变这个对象的高度和宽度吗?举个例子,现在有一个图片,是imageview,我可不可以给他做一个动画让他高度变大?这个变大是指他实际占用的位置,比如这个imagview我在xml里配置的是200dip,通过动画我可以让他再动画结束后的高度变成500dip吗? 解决方案 类似效果,你的动画改变view布局参数,应该对imageView应用新的布局参数. 创建应用新布局参数(lp)的自定义

android 中的动画无效果

问题描述 android 中的动画无效果 image = (ImageView) findViewById(R.id.main_img); start = (Button) findViewById(R.id.main_start); cancel = (Button) findViewById(R.id.main_cancel); final TranslateAnimation animation = new TranslateAnimation(0, -150,0, -150); anim

Android中Java反射技术的使用示例

MainActivity如下: package cn.testreflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * Android中Java反射技术的使用示例 * 在Java中描述字节码文

Android中js和原生交互的示例代码

本文介绍了Android中js和原生交互的示例代码,分享给大家,具体如下: 加载webview的类 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); JavaScriptInterf

浅谈Android中视图动画的属性与使用_Android

简介 Android动画主要包括视图动画和属性动画,视图动画包括Tween动画和Frame动画,Tween动画又包括渐变动画.平移动画.缩放动画.旋转动画. Tween动画的基本属性       目标 View:       时常 duration;       开始状态 fromXXX;       结束动画 toXXX;       开始时间 startOffset;       重复次数 repeatCount;       时间轴 interpolator(插值器). 代码示例 xml实

浅谈Android中视图动画的属性与使用

简介 Android动画主要包括视图动画和属性动画,视图动画包括Tween动画和Frame动画,Tween动画又包括渐变动画.平移动画.缩放动画.旋转动画. Tween动画的基本属性 目标 View: 时常 duration; 开始状态 fromXXX; 结束动画 toXXX; 开始时间 startOffset; 重复次数 repeatCount; 时间轴 interpolator(插值器). 代码示例 xml实现 <?xml version="1.0" encoding=&qu

Android 用属性动画自定义view的渐变背景

自定义view渐变背景,同时监听手势自动生成小圆球.   宿主Activity如下:   package com.edaixi.tempbak; import java.util.ArrayList; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.A