安卓属性动画ValueAnimator与ObjectAnimator详解

直接上demo,用法都在程序的注释里了,首先上五渣效果图,

技术分享


布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.animation.MainActivity" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/alpha"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="渐渐消失" />

        <Button
            android:id="@+id/rotate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="旋转360" />

        <Button
            android:id="@+id/translationX"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="左右移动" />

        <Button
            android:id="@+id/translationY"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="上下移动" />
    </LinearLayout>

    <Button
        android:id="@+id/scaleX"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="左右拉伸" />

    <Button
        android:id="@+id/scaleY"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="上下拉伸" />

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="动画样例"
        android:textSize="30sp"
        android:textColor="#00EE00" />

</LinearLayout>



主Activity

package com.example.animation;

import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

	private TextView textview ;
	private Button scaleX ;
	private Button scaleY ;
	private Button alpha ;
	private Button rotate ;
	private Button translationX ;
	private Button translationY ;
	private ValueAnimator va ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		this.textview = (TextView) findViewById(R.id.textview) ;
		this.alpha = (Button) findViewById(R.id.alpha) ;
		this.rotate = (Button) findViewById(R.id.rotate) ;
		this.translationX = (Button)findViewById(R.id.translationX) ;
		this.translationY = (Button)findViewById(R.id.translationY) ;
		this.scaleX = (Button)findViewById(R.id.scaleX) ;
		this.scaleY  = (Button)findViewById(R.id.scaleY) ;
		this.scaleX.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				scaleX() ;
			}

		});
		
		this.scaleY.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				scaleY();
			}
		});
		this.translationY.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				translation(2) ;
			}
		});
		this.translationX.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				translation(1);
			}
		});
		this.alpha.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				alpha() ;
			}
		});

		this.rotate.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				rotate() ;
			}
		});
	}
	/*
	 * 旋转动画
	 */
	private void rotate() {
		this.va = ObjectAnimator.ofFloat(textview, "rotation", 0f,360f);   //从0度旋转到360度
		this.va.setDuration(5000) ;   //设置从0度到360度的旋转时间
		//this.va.setRepeatCount(5);   重复5次
		//this.va.setRepeatMode(ValueAnimator.REVERSE);  播放完毕直接翻转播放
		//this.va.setRepeatMode(ValueAnimator.RESTART);  播放完毕直接从头播放
		this.va.start();
	}

	/*
	 *左右移动 so  up and down  is translationY
	 *flag==1  zuoyou
	 *flag==2 shangxia
	 */
	private void translation(int flag) {
		if(flag == 1)
			this.va = ObjectAnimator.ofFloat(textview, "translationX", 0f,50f,5f);   //left and right
		else this.va = ObjectAnimator.ofFloat(textview, "translationY", 0f,50f,5f);   //left and right
		this.va.setDuration(1500) ;   //设置从0度到360度的旋转时间
		this.va.setRepeatCount(5);  // 重复5次
		//this.va.setRepeatMode(ValueAnimator.REVERSE);  播放完毕直接翻转播放
		//this.va.setRepeatMode(ValueAnimator.RESTART);  播放完毕直接从头播放
		this.va.start();
	}


	/*
	 *上下移动移动 
	 */
	private void translationY() {
		this.va = ObjectAnimator.ofFloat(textview, "translationY", 0f,50f,5f);   //left and right
		this.va.setDuration(1500) ;   //设置从0度到360度的旋转时间
		this.va.setRepeatCount(5);  // 重复5次
		//this.va.setRepeatMode(ValueAnimator.REVERSE);  播放完毕直接翻转播放
		//this.va.setRepeatMode(ValueAnimator.RESTART);  播放完毕直接从头播放
		this.va.start();
	}

	/*
	 * 改变透明度(渐渐消失)
	 */
	private void alpha() {
		this.va = ObjectAnimator.ofFloat(this.textview,"alpha",1f,0f,1f) ; //透明度从1变成0然后变成1,以此类推。。
		this.va.setDuration(5000) ;   //设置变化间隔
		//this.va.setRepeatCount(5);   重复5次
		//this.va.setRepeatMode(ValueAnimator.REVERSE);  播放完毕直接翻转播放
		//this.va.setRepeatMode(ValueAnimator.RESTART);  播放完毕直接从头播放
		this.va.start();
	}

	/*
	 * 左右拉伸
	 */
	private void scaleX() {
		this.va = ObjectAnimator.ofFloat(this.textview,"scaleX",1f,5f,1f) ;
		this.va.setDuration(5000) ;
		//this.va.setRepeatCount(5);   重复5次
		//this.va.setRepeatMode(ValueAnimator.REVERSE);  播放完毕直接翻转播放
		//this.va.setRepeatMode(ValueAnimator.RESTART);  播放完毕直接从头播放
		this.va.start();

	}
	
	/*
	 * 上下拉伸
	 */
	private void scaleY() {
		this.va = ObjectAnimator.ofFloat(this.textview,"scaleY",1f,5f,1f) ;
		this.va.setDuration(5000) ;
		//this.va.setRepeatCount(5);   重复5次
		//this.va.setRepeatMode(ValueAnimator.REVERSE);  播放完毕直接翻转播放
		//this.va.setRepeatMode(ValueAnimator.RESTART);  播放完毕直接从头播放
		this.va.start();

	}
}



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。