Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android學習第五篇——動畫效果

Android學習第五篇——動畫效果

編輯:關於android開發

Android學習第五篇——動畫效果


接下來我要介紹的是Android的一些動畫效果

一、AlphaAnimation透明動畫

這裡我用到了兩種不同的方法來實現透明動畫效果

首先布局文件很簡單,就是拖放一個按鈕在界面上

 

 

1、直接調動AlphaAnimation類

我們到MainActivity文件中,找到PlaceholderFragment,接下來我們在這裡面執行接下來的方法

 

public static class PlaceholderFragment extends Fragment {

		public PlaceholderFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			View rootView = inflater.inflate(R.layout.fragment_main, container,
					false);
			return rootView;
		}
	}
我們首先要獲取那個按鈕,然後對按鈕添加監聽事件

 

 

rootView.findViewById(R.id.btnAnimate).setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
				}
			});
接下來就是最關鍵的添加動畫效果

 

 

rootView.findViewById(R.id.btnAnimate).setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					AlphaAnimation aa=new AlphaAnimation(0, 1);//
 
AlphaAnimation(float fromAlpha, float toAlpha)起始透明度和結束透明度 aa.setDuration(1000);//變化持續的時間1000ms v.startAnimation(aa); } });代碼寫到這裡就已經完成了我們的效果,直接在模擬器中運行就可以看到效果了。

2、調用另外的XML動畫文件

 

相對於上面的這種方法,接下來的方法,在調用的時候會顯得更加簡單,就是一句話的事

 

public void onClick(View v) {
	v.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.aa));
}
只要這麼一句話就結束了,但是關鍵在於R.anim.aa這個文件

 

我們需要新建一個XML文件,並且把Resource Type設為下圖的值,填上文件名,然後選擇alpha,點擊Finish就完成了
\

接下來我們在創建的文件中作如下編寫就直接可以調用了

 




這樣我們也完成了第二種方法。

 

二、RotateAnimation旋轉動畫

這裡我同樣會用兩種方法來實現旋轉動畫,跟第一個動畫一樣   我們同樣是一個按鈕作為對象 布局文件

1、直接調用RotateAnimation

接下來我們就要到MainActivity中進行操作了 首先定義一下
private RotateAnimation ra;
接下來我們會在onCreate中操作
ra=new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
		ra.setDuration(1000);
		
		findViewById(R.id.btnRotate).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				v.startAnimation(ra);
			}
		});
我們一開始調用的構造函數是下面這個
ra=new RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue)
這裡面的參數分別表示為:開始角度,目標角度,X坐標類型,X坐標值,Y坐標類型,Y坐標值 為什麼我們要用這個呢?? 因為我們需要通過這個來控制按鈕是圍繞哪個中心進行旋轉的,上面設置的值表示“按鈕圍繞自身X的一半,Y的一半,轉一圈”,我們會覺這樣寫很繁瑣,有時候會不記得那個類型怎麼寫,所以我們接下來看看第二種方法(上述代碼已經可以運行了,運行結果就是點擊按鈕後會旋轉一圈)

2、調用XML文件

XML文件的創建和第一種的一樣,只是下面的根標簽要換成Rotate



可能看了這個以後我們會疑問,為什麼這裡不用寫pivotX和pivotY的Type了呢?? 因為在這裡,pivotX和pivotY可以接受百分比的值,這樣我們就覺得很方便,當然如果這兩個值設成數值,表示的是像素。 最後一步就很簡單了,只要在MainActivity中調用就可以了
findViewById(R.id.btnRotate).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.ra));
			}
		});
第二種方法到這裡就完成了,代碼執行的效果和前一種是一樣的。
 

三、TranslateAnimation移動動畫

  布局文件

1、直接調用TranslateAnimation

  方法和之前的沒有很大的差別,就不在多說,直接貼代碼了
		private TranslateAnimation ta;
		//相對於自身來說,向右移動200增量,和向下移動200增量
		ta = new TranslateAnimation(0, 200, 0, 200);
		ta.setDuration(1000);
		
		findViewById(R.id.btnTranslate).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				v.startAnimation(ta);
			}
		});

2、調用XML文件

同樣和之前沒事差別,改變的只是XML文件的根標簽Translate




最後調用
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.ta));
這兩個的效果是完全相同的,各個參數的值表示什麼意思上面的注釋中已經有了  

四、ScaleAnimation縮放動畫

  布局文件
<framelayout android:id="@+id/container" android:layout_height="match_parent" android:layout_width="match_parent" tools:context="com.example.scaleanimation.MainActivity" tools:ignore="MergeRootFrame" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"></framelayout>

1.、直接調用ScaleAnimation

 
		private ScaleAnimation sa;//這句需要定義在外面
		//相對於自身的中心點來縮放
		sa = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
		sa.setDuration(1000);
		findViewById(R.id.btnScale).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				v.startAnimation(sa);
			}
		});

2、調用XML文件

  XML文件根標簽換成Scale




  最後調用
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.sa));
效果就是點擊按鈕,按鈕會一中心點進行縮放,上面的toXScale=“1”表示不縮放,這個1是一個比例,就是100%  

五、混合動畫效果

  布局文件
 

1、直接調用多種動畫效果

我們需要完成的是混合的動畫效果,所以我們不能單一的定義一種動畫效果,我們需要一個集合去存放所有需要的動畫效果
private AnimationSet as;
  接下來的代碼就非常類似了
//是否公用動畫補間
		as = new AnimationSet(true);
		as.setDuration(1000);
		
		AlphaAnimation aa = new AlphaAnimation(0, 1);
		aa.setDuration(1000);
		as.addAnimation(aa);
		
		TranslateAnimation ta = new TranslateAnimation(200, 0, 200, 0);
		ta.setDuration(1000);
		as.addAnimation(ta);
		
		findViewById(R.id.btnAnimate).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				v.startAnimation(as);
			}
		});

這樣就完成了兩種混合動畫效果的實現  

2、調用XML文件

同樣的我們需要創建一個XML文件,且文件的根標簽我為set



    

    

最後的調用方法也是一樣的
v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.as));
同樣完成了兩種混合動畫效果的實現

六、自定義動畫效果

  布局和之前的一樣,這裡就不重復貼代碼了!   Android只給我們提供了前四種最基本的動畫效果,這對於我們來說是完全不夠用了,所以我們需要自己定義動畫效果來滿足自身的需求。 這裡我將實現一個按鈕點擊後,有震動效果的動畫 首先我們需要創建一個類名為CustomAnimation 並且繼承自Animation 在方法中需要重寫applyTransformation這個方法
package com.example.customanimation;

import android.view.animation.Animation;
import android.view.animation.Transformation;

public class CustomAnimate extends Animation {
	@Override
	protected void applyTransformation(float interpolatedTime, Transformation t) {
		// TODO Auto-generated method stub
		super.applyTransformation(interpolatedTime, t);
	}
}
我們來解釋一下這裡的參數 在繪制動畫的過程中會反復的調用applyTransformation函數,每次調用參數interpolatedTime值都會變化,該參數從0漸變為1,當該參數為1時表明動畫結束。通過參數Transformation來獲取變換的矩陣(matrix),通過改變矩陣就可以實現各種復雜的效果。 interpolatedTime就是補間執行的時間,就是我們在創建類的實例的時候設置的xx.setDuration(1000);中的值。   同時我們還需要重寫一個initialize方法,當我們需要實現旋轉動畫時,我們需要知道對象的一些信息,方便與於我們進行操作,該方法在一開始就會執行。
	@Override
	public void initialize(int width, int height, int parentWidth,
			int parentHeight) {
		// TODO Auto-generated method stub
		super.initialize(width, height, parentWidth, parentHeight);
	}

接下來我們完成我們需要的效果吧!
@Override
	protected void applyTransformation(float interpolatedTime, Transformation t) {
		// TODO Auto-generated method stub
		
		//Math.sin()是個周期函數,我們要實現按鈕左右搖擺,就需要按鈕可以周期性的移動,所以使用sin
		//括號裡的表示時間
		//50表示的是左右移動的像素大小
		//因為只需要左右移動就行了,需要把Y設為0
		t.getMatrix().setTranslate((float) (Math.sin(interpolatedTime*20)*50),0);
		super.applyTransformation(interpolatedTime, t);
	}
接下來的步驟就是MainActivity中調用了
private CustomAnimate ca;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		
		ca = new CustomAnimate();
		ca.setDuration(1000);
		findViewById(R.id.btnAnimate).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				v.startAnimation(ca);
			}
		});
	}

運行起來我們就可以看到我們想要的效果了!  

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved