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