今天學習動畫:
Animations的分類:
1.TweenedAnimation :提供旋轉、移動、伸展、和淡出的效果
Alpha:淡入淡出效果 Scale:縮放效果
Rotate:旋轉效果 Translate: 移動效果
2.Frame-by-Frame Animation :創建Drawable的序列,可以按照指定的時間間隙一個個顯示(1s中播放24張以上的圖片就可以變成視頻了)也可以做成動態廣告的形式
3.res文件加下加入XMl文件,可以使用XML文件實現控制動畫,XML文件中添加Set標簽,標簽中加入rotate、alpha、scale、或者translate 代碼中實現AnimationUtil裝載xml
文件並生成,Animation對象需要注意的是
<!--pivotX pivotY旋轉時候 的坐標絕對位置的
50這種方法使用的是絕對位置
50%相對於空間本身定位
"50%p"的意思是相對於空控件的父控件的定位 -->
4.接著咱們看看代碼的實現過程
首先看看兩種方法共同的布局文件
- <?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" >
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- 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/scale"
- 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="旋轉效果" />
- <Button
- android:id="@+id/translate"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="移動效果" />
- </LinearLayout>
- <ImageView
- android:id="@+id/image"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/a" />
-
-
- </LinearLayout>
5.看看第一種方法的活動實現的過程
- package com.wang;
-
- import com.wang.R.id;
-
- import android.R.anim;
- import android.R.integer;
- import android.app.Activity;
- import android.os.Bundle;
- import android.provider.ContactsContract.CommonDataKinds.Im;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.animation.AccelerateDecelerateInterpolator;
- import android.view.animation.AccelerateInterpolator;
- import android.view.animation.AlphaAnimation;
- import android.view.animation.Animation;
- import android.view.animation.AnimationSet;
- import android.view.animation.RotateAnimation;
- import android.view.animation.ScaleAnimation;
- import android.view.animation.Transformation;
- import android.view.animation.TranslateAnimation;
- import android.widget.Button;
- import android.widget.ImageView;
-
- public class AnimationTestActivity extends Activity {
- private ImageView image = null;
- private Button Alphabutton = null;
- private Button scalebutton = null;
- private Button rotatebutton = null;
- private Button translatebutton = null;
-
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- image = (ImageView) findViewById(R.id.image);
- Alphabutton = (Button) findViewById(R.id.Alpha);
- scalebutton = (Button) findViewById(R.id.scale);
- rotatebutton = (Button) findViewById(R.id.rotate);
- translatebutton = (Button) findViewById(R.id.translate);
- // 淡入淡出按鈕的監聽時間
- Alphabutton.setOnClickListener(new OnClickListener() {
-
- public void onClick(View v) {
- // 創建一個AnimationSet對象
- AnimationSet animationSet = new AnimationSet(true);
- // j加速播放
- animationSet.setInterpolator(new AccelerateInterpolator());
- // //創建一個AnimationSet對象淡出旋轉二合一
- AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
- RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
- Animation.RELATIVE_TO_PARENT, 1f,// X軸
- Animation.RELATIVE_TO_PARENT, 0f);// y軸
-
- // 將alphaAnimation對象添加到animationSet中
- animationSet.addAnimation(alphaAnimation);
- animationSet.addAnimation(rotateAnimation);
- // 顯示的時間為1s
- alphaAnimation.setDuration(3000);
- // 開始執行動畫
- image.startAnimation(animationSet);
- // 設置重復的次數
- animationSet.setRepeatCount(4);
-
- }
-
- });
- // 縮放按鈕的監聽事件
- scalebutton.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- AnimationSet animationSet = new AnimationSet(true);
- // 從1縮放的0.1
- ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.1f, 1,
- 0.1f, Animation.RELATIVE_TO_SELF, 0.5f,
- Animation.RELATIVE_TO_SELF, 0.5f);
-
- animationSet.addAnimation(scaleAnimation);
-
- // 執行前等待的時間
- animationSet.setStartOffset(1000);
-
- // dd動畫執行之前和之後的狀態
- animationSet.setFillAfter(true);
- animationSet.setFillBefore(false);
- animationSet.setDuration(5000);
- image.startAnimation(animationSet);
-
- }
- });
- // 旋轉按鈕的單擊事件
- rotatebutton.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
-
- AnimationSet animationSet = new AnimationSet(true);
- // 創建對象 參數 從0度轉到360度
- /*********
- **一個動畫控制旋轉的一個對象。這個旋轉發生int xy平面。 您可以指定點使用的中心旋轉,在那裡(0,0)是左上角點。
- * 如果未指定,(0,0)是默認的旋轉點
- **/
- RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
- Animation.RELATIVE_TO_PARENT, 1f,// X軸
- Animation.RELATIVE_TO_PARENT, 0f);// y軸
- rotateAnimation.setDuration(5000);
- animationSet.addAnimation(rotateAnimation);
- image.startAnimation(animationSet);
-
- }
- });
- // 移動按鈕的點擊事件
- translatebutton.setOnClickListener(new OnClickListener() {
-
- public void onClick(View v) {
-
- AnimationSet animationSet = new AnimationSet(true);
- TranslateAnimation translatebutton = new TranslateAnimation(
- Animation.RELATIVE_TO_SELF, 0f,// //X軸
- Animation.RELATIVE_TO_SELF, 0.5f,// y軸
- Animation.RELATIVE_TO_SELF, 0f,// X軸
- Animation.RELATIVE_TO_SELF, 1.0f);// y軸
- translatebutton.setDuration(5000);
- }
- });
- }
- }
6.第二種方式實現的時候要在res的文件之下在建一個文件夾anim。文件夾裡面包含的四個文件如下
alpha.xml 淡入淡出效果的文件
- <?xml version="1.0" encoding="UTF-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/accelerate_interpolator" >
-
- <alpha
- android:duration="500"
- android:fromAlpha="1.0"
- android:startOffset="500"
- android:toAlpha="0.0" />
-
- </set>
rotate.xml 旋轉效果的文件
- <?xml version="1.0" encoding="UTF-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/accelerate_interpolator" >
-
- <rotate
- android:fromDegrees="0"
- android:toDegrees="350"
- android:pivotX="50%p"
- android:pivotY="50%p"
- android:duration="3000" />
- <!--pivotX pivotY旋轉時候 的坐標絕對位置的
- 50這種方法使用的是絕對位置
- 50%相對於空間本身定位
- "50%p"的意思是相對於空控件的父控件的定位
-
- -->
- </set>
sacle.xml 縮放效果的文件
- <?xml version="1.0" encoding="UTF-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/accelerate_interpolator" >
-
-
- <scale
- android:fromXScale="1.0"
- android:toXScale="0.0"
- android:fromYScale="1.0"
- android:toYScale="0.0"
- android:pivotX="50%"
- android:pivotY="50%"
- android:duration="3000"/>
-
-
- </set>
translate.xml 移動效果的文件
- <?xml version="1.0" encoding="UTF-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/accelerate_interpolator" >
-
- <translate
- android:fromXDelta="50%"
- android:toXDelta="100%"
- android:fromYDelta="0%"
- android:toYDelta="100%"
- android:duration="3000" />
-
- </set>
7.接著看看第二種方法的Activity的實現過程
- package com.wang;
-
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.animation.Animation;
- import android.view.animation.AnimationUtils;
- import android.widget.Button;
- import android.widget.ImageView;
-
- public class AnimationXMLActivity extends Activity {
-
- private ImageView image;
- private Button alphabutton;
- private Button rotatebutton;
- private Button saclebutton;
- private Button translatebutton;
-
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- image = (ImageView) findViewById(R.id.image);
- alphabutton = (Button) findViewById(R.id.alpha);
- rotatebutton = (Button) findViewById(R.id.roate);
- saclebutton = (Button) findViewById(R.id.scale);
- translatebutton = (Button) findViewById(R.id.translate);
- // 淡入淡出按鈕的監聽事件
- alphabutton.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- // s使用AnimationUtils裝載動畫設置文件
- Animation animation = AnimationUtils.loadAnimation(
- AnimationXMLActivity.this, R.anim.alpha);
- // 啟動
- image.startAnimation(animation);
- }
- });
- // 旋轉效果的監聽事件
- rotatebutton.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
-
- // s使用AnimationUtils裝載動畫設置文件
- Animation animation = AnimationUtils.loadAnimation(
- AnimationXMLActivity.this, R.anim.rotate);
- image.startAnimation(animation);// TODO Auto-generated method
- // stub
-
- }
- });
- // 縮放組件的效果監聽
- saclebutton.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- // s使用AnimationUtils裝載動畫設置文件
- Animation animation = AnimationUtils.loadAnimation(
- AnimationXMLActivity.this, R.anim.sacle);
- image.startAnimation(animation); // TODO Auto-generated method
- // stub
-
- }
- });
- // 移動效果的監聽事件
- translatebutton.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- // s使用AnimationUtils裝載動畫設置文件
- Animation animation = AnimationUtils.loadAnimation(
- AnimationXMLActivity.this, R.anim.translate);
- image.startAnimation(animation);
- }
- });
-
- }
- }
8.殊路同歸,這兩種方法實現的功能都差不多,第一張圖片是原圖,第二張圖片是淡入淡出的效果,第三張是旋轉的效果圖,第四章是縮放的效果圖,第五章是移動的效果圖
由於是動畫效果,所以只能截取圖片的一部分
,