在Android中系統給我們提供了兩種實現動畫效果的方法,其中一種是Tween,還有一種是Frame動畫;
Tween動畫中,我們可以通過Tween動畫去使得視圖實現視圖放大,縮小,旋轉,漸變等等功能;這個動畫類在android.view.animation包下面,
主要為我們提供以下的一些常用方法:(【注】以下對於些類的解釋說明,是我看文檔自己翻譯的,可能有些地方不准確,也算是自己作為學習英語的機會,還請大家見諒一下哈)
Animation 這是動畫的抽象類,其他的幾個實現的動畫類繼承這個類
AnimationSet這是動畫的屬性的集合類
AnimationUtils 這個類是定義動畫工具類
AlphaAnimation 這個類可以對動畫的透明度進行控制
RotateAnimation 這個類可以對動畫的旋轉的位置進行控制
ScaleAnimation 這個類可以對動畫的大小進行控制
TranslateAnimation 這個類可以對動畫位置進行控制
下面是Twwen動畫的一些常用動畫實現類的說明
AlphaAnimation 類(漸變調整透明度)常用的構造方法
AlphaAnimation(float fromAlpha, float toAlpha)
參數說明:
float fromAlpha :動畫剛開始的透明度 ,
float toAlpha:動畫結束的透明度 取值范圍是(0.0到1.0,;0.0代表不透明,1.0代表完全透明)
RoateAnimation 類 (動畫旋轉) 常用的構造方法
RotateAnimation(float fromDegrees, float toDegrees),
RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY),
RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
參數說明:fromDegrees:開始旋轉的角度,.toDegrees:結束旋轉的角度
.pivotXType:在X坐標方向的伸縮的方式,pivotYType:在Y坐標方向的伸縮方式;
pivotXValue:在X坐標方向的伸縮值,pivotYValue:在Y坐標方向的伸縮值
ScaleAnimation 類(動畫大小的控制類) 常用的構造方法
ScaleAnimation(float fromX, float toX, float fromY, float toY)
ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY)
ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
參數說明:fromX: 起始的X坐標,toX:結束的X坐標,fromY:起始的Y坐標,toY:結束的Y坐標
.pivotXType:在X坐標方向的伸縮的方式,pivotYType:在Y坐標方向的伸縮方式;
pivotXValue:在X坐標方向的伸縮值,pivotYValue:在Y坐標方向的伸縮值
TranslateAnimation類(動畫位置控制) 常用的構造方法
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
參數說明: fromXDelta:起始的X坐標;toXDelta:結束的X坐標
fromYDelta:起始的Y坐標,toYDelta:結束的Y坐標
要實現Twwen動畫的效果,有兩種辦法 第一個種是直接在代碼中進行設置,第二種是在XML文件進行配置;
首先下看下直接編碼設置的辦法:
Demo源代碼如下:
- package com.android.animation;
-
- import com.android.R;
-
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.animation.AlphaAnimation;
- import android.view.animation.Animation;
- import android.view.animation.RotateAnimation;
- import android.view.animation.ScaleAnimation;
- import android.view.animation.TranslateAnimation;
- import android.widget.Button;
- import android.widget.ImageView;
-
- public class Demo_Animation extends Activity {
-
- // 定義四個按鈕,分別對用四種動畫效果操作
- private Button alpha, roate, scale, translate;
-
- // 聲明ImageView組件
- private ImageView animation_test;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.animation);
-
- animation_test = (ImageView) this.findViewById(R.id.test_animation);
- alpha = (Button) this.findViewById(R.id.alpha);
- roate = (Button) this.findViewById(R.id.roate);
- scale = (Button) this.findViewById(R.id.scale);
- translate = (Button) this.findViewById(R.id.translate);
-
- // 為按鈕組件添加監聽事件
- alpha.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
-
- // 創建漸變的 AlphaAnimation()構造方法中 參數要加 f 因為是浮點型的
- Animation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);
- // 設置畫面漸變的時間 單位:毫秒 本實例設置為3 s
- alphaAnimation.setDuration(3000);
- // 為圖片添加效果,開始動畫
- animation_test.setAnimation(alphaAnimation);
- }
- });
-
- roate.setOnClickListener(new OnClickListener() {
-
- /**
- * 其中有設置旋轉的伸縮的方法 有
- *
- * @author jiangqq ①:Animation.RELATIVE_TO_SELF
- * @author jiangqq ②:Animation.RELATIVE_TO_PARENT
- * @author jiangqq ③:Animation.ABSOLUTE
- */
- @Override
- public void onClick(View v) {
- // 設置旋轉
- Animation roateAnimation = new RotateAnimation(0f, +180f,
- Animation.RELATIVE_TO_SELF, 1.0f,
- Animation.RELATIVE_TO_SELF, 1.0f);
- // 設置畫面漸變的時間 單位:毫秒 本實例設置為3 s
- roateAnimation.setDuration(3000);
- // 為圖片添加效果,開始動畫
- animation_test.setAnimation(roateAnimation);
- }
- });
-
- scale.setOnClickListener(new OnClickListener() {
-
- /**
- * 其中沿X軸與Y軸的伸縮方式的三種模式 在上面roate監聽類方法中有說明了
- */
- @Override
- public void onClick(View v) {
- Animation scaleAnimation = new ScaleAnimation(0.0f, 1.0f, 0.0f,
- 1.0f, Animation.RELATIVE_TO_SELF, 1.5f,
- Animation.RELATIVE_TO_SELF, 1.5f);
- // 設置畫面漸變的時間 單位:毫秒 本實例設置為3 s
- scaleAnimation.setDuration(3000);
- // 為圖片添加效果,開始動畫
- animation_test.setAnimation(scaleAnimation);
- }
- });
- translate.setOnClickListener(new OnClickListener() {
-
- /**
- * 位置變化
- */
- @Override
- public void onClick(View v) {
- Animation translateAnimation = new TranslateAnimation(0.0f,
- 15.0f, 0.0f, 15.0f);
- // 設置畫面漸變的時間 單位:毫秒 本實例設置為3 s
- translateAnimation.setDuration(3000);
- // 為圖片添加效果,開始動畫
- animation_test.setAnimation(translateAnimation);
- }
- });
- }
- }
- </pre><p></p><p><span style="font-size:16px;">布局文件如下:</span></p><p><span style="font-size:16px;"> </span></p><p><span style="font-size:16px;"></span></p><p><span style="font-size:16px;"></span></p><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
-
- <ImageView
- android:id="@+id/test_animation"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/animation_test" />
-
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginTop="20dip" >
-
- <Button
- android:id="@+id/alpha"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="alpha" />
-
- <Button
- android:id="@+id/roate"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="roate" />
-
- <Button
- android:id="@+id/scale"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="scale" />
-
- <Button
- android:id="@+id/translate"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="translate" />
- </LinearLayout>
-
- </LinearLayout>
效果截圖: