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

android 動畫效果,android動畫

編輯:關於android開發

android 動畫效果,android動畫


動畫資源
一、分類: (一)、概要:         3.0以前,android支持兩種動畫模式,補間動畫(tween animation),幀動畫(frame animation),在android3.0中又引入了一個新的動畫系統:屬性動畫(property animation)。         這三種動畫模式在SDK中被稱為view animation,drawable animation,property animation。   (二)、動畫資源分類:
  二、補間動畫:         View Animation就是一系列View形狀的變換,如大小的縮放、透明度的改變、水平位置的改變、旋轉位置改變,動畫的定義既可以用java代碼定義也可以用XML定義。建議用XML定義。         用XML定義的動畫放在/res/anim/文件夾內,XML文件的根元素為<set> , 二級節點可為<alpha>,<scale>,<translate>,<rotate>。 (一)、用xml資源實現補間動畫:

publicclass MainActivity extends Activity {

private ImageView imageView_main;
private Animation animation = null;


@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

imageView_main = (ImageView) findViewById(R.id.imageView_main);
}


publicvoid clickButton(View view) {
switch (view.getId()) {
case R.id.button_main_alpha:
animation = new AlphaAnimation(0.0f, 1.0f);
break;
case R.id.button_main_scale:
animation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 1.0f);
break;
case R.id.button_main_translate:
animation = new TranslateAnimation(0, 150, 0, 0);
break;
case R.id.button_main_rotate:
animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF,
0.5f, Animation.RELATIVE_TO_SELF, 1.0f);
break;
default:
break;
}
animation.setDuration(3000);
imageView_main.setAnimation(animation);
}
}
  (二)、用java代碼實現補間動畫:

publicclass MainActivity extends Activity {

private ImageView imageView_main;
private Animation animation = null;


@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

imageView_main = (ImageView) findViewById(R.id.imageView_main);
}


publicvoid clickButton(View view) {
switch (view.getId()) {
case R.id.button_main_alpha:
animation = new AlphaAnimation(0.0f, 1.0f);
break;
case R.id.button_main_scale:
animation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 1.0f);
break;
case R.id.button_main_translate:
animation = new TranslateAnimation(0, 150, 0, 0);
break;
case R.id.button_main_rotate:
animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF,
0.5f, Animation.RELATIVE_TO_SELF, 1.0f);
break;
default:
break;
}
animation.setDuration(3000);
imageView_main.setAnimation(animation);
}
}
    三、幀動畫:         Frame Animation(AnimationDrawable對象):幀動畫,就像GIF圖片,通過一系列Drawable依次顯示來模擬動畫的效果。         必須以<animation-list>為根元素,以<item>表示要輪換顯示的圖片,duration屬性表示各項顯示的時間。XML文件要放在/res/anim/或者/res/animator目錄下。 (一)、實例代碼:
一、res/anim/frame_animation.xml的代碼:

 

<animation-listxmlns:android="http://schemas.android.com/apk/res/android"

android:oneshot="true">

<itemandroid:drawable="@drawable/anim1"android:duration="50"/>

<itemandroid:drawable="@drawable/anim2"android:duration="50"/>

<itemandroid:drawable="@drawable/anim3"android:duration="50"/>

<itemandroid:drawable="@drawable/anim4"android:duration="50"/>

<itemandroid:drawable="@drawable/anim5"android:duration="50"/>

<itemandroid:drawable="@drawable/anim6"android:duration="50"/>

<itemandroid:drawable="@drawable/anim7"android:duration="50"/>

<itemandroid:drawable="@drawable/anim8"android:duration="50"/>

<itemandroid:drawable="@drawable/anim9"android:duration="50"/>

<itemandroid:drawable="@drawable/anim10"android:duration="50"/>

<itemandroid:drawable="@drawable/anim11"android:duration="50"/>

<itemandroid:drawable="@drawable/anim12"android:duration="50"/>

</animation-list>

 
 

二、MainActivity.java代碼:


public class MainActivity extends Activity {

private ImageView imageView_main_show;

private AnimationDrawable animationDrawable = null;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

 

imageView_main_show = (ImageView) findViewById(R.id.imageView_main_show);

imageView_main_show.setBackgroundResource(R.anim.frame_animation);

animationDrawable = (AnimationDrawable) imageView_main_show.getBackground();

}

 

public void clickButton(View view) {

switch (view.getId()) {

case R.id.button_main_start:

if (!animationDrawable.isRunning()) {

                                //一組動畫是否只播放一次

animationDrawable.setOneShot(false);

animationDrawable.start();

}

break;

case R.id.button_main_stop:

if (animationDrawable.isRunning()) {

animationDrawable.stop();

}

break;

}

}

 

@Override

public void onWindowFocusChanged(boolean hasFocus) {

super.onWindowFocusChanged(hasFocus);

if (!animationDrawable.isRunning()) {

animationDrawable.setOneShot(false);

animationDrawable.start();

}

}

}

 

  【備注:】         SDK中提到,不要在onCreate()中調用start(),因為AnimationDrawable還沒有完全跟Window相關聯,如果想要界面顯示時就開始動畫的話,可以在onWindowFoucsChanged()中調用start()。     四、屬性動畫: (一)、概念:         屬性動畫,這個是在Android 3.0中才引進的。Property Animation故名思議就是通過動畫的方式改變對象的屬性.屬性動畫更改的是對象的實際屬性,在View Animation(Tween Animation)中,其改變的是View的繪制效果,真正的View的屬性保持不變。         比如無論如何縮放Button的大小,Button的有效點擊區域還是沒有應用動畫時的區域,其位置與大小都不變。而在Property Animation中,改變的是對象的實際屬性,如Button的縮放,Button的位置與大小屬性值都改變了。         Property Animation不止可以應用於View,還可以應用於任何對象。Property Animation只是表示一個值在一段時間內的改變,當值改變時要做什麼事情完全是你自己決定的。     (二)、常用屬性: (三)、相關的類:
  • 總的來說,屬性動畫就是,動畫的執行類來設置動畫操作的對象的屬性、持續時間,開始和結束的屬性值,時間差值等,然後系統會根據設置的參數動態的變化對象的屬性。
  (一)、實例代碼:
一、res/anim/property_anim.xml的代碼:

<setxmlns:android="http://schemas.android.com/apk/res/android"

    android:ordering="sequentially">

 

<objectAnimator

        android:duration="4000"

        android:propertyName="x"

        android:valueTo="300"

        android:valueType="intType"/>

 

    <objectAnimator

        android:duration="4000"

        android:propertyName="y"

        android:valueTo="400"

        android:valueType="intType"/>

    

<objectAnimator

        android:duration="4000"

        android:propertyName="x"

        android:valueTo="0"

        android:valueType="intType"/>

 

    <objectAnimator

        android:duration="4000"

        android:propertyName="y"

        android:valueTo="0"

        android:valueType="intType"/>

</set>

 
 

二、MainActivity.java代碼:

 

 

publicclass MainActivity extends Activity {

private ImageView imageView_main_obj;

private Move move;

 

@Override

publicvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

imageView_main_obj = (ImageView) findViewById(R.id.imageView_main_obj);

move = new Move();

 

imageView_main_obj.setOnClickListener(new OnClickListener() {

@Override

publicvoid onClick(View v) {

setTitle(move.getX() + ":" + move.getY());

}

});

}

 

class Move {

privateinty;

privateintx;

 

publicint getY() {

returny;

}

 

publicvoid setY(int y) {

this.y = y;

imageView_main_obj.layout(imageView_main_obj.getLeft(), y,

imageView_main_obj.getRight(),

y + imageView_main_obj.getMeasuredHeight());

}

 

publicint getX() {

returnx;

}

 

publicvoid setX(int x) {

this.x = x;

imageView_main_obj.layout(x, imageView_main_obj.getTop(), x

+ imageView_main_obj.getMeasuredWidth(),

imageView_main_obj.getBottom());

}

}

 

publicvoid clickButton(View view) {

// 裝載屬性動畫資源

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this,

R.animator.property_anim);

// 設置要控制的對象

set.setTarget(move);

// 開始動畫

set.start();

}

}

 

【備注說明:】

<objectAnimator

        android:duration="4000"

        android:propertyName="x"

        android:valueTo="300"

        android:valueType="intType"/>

  【備注:】
  • android:ordering說明一系列動畫動作的執行順序,有兩個選擇: sequentially 和together,順序執行還是一起執行; 
  • objectAnimator 是設定動畫實施的對象;
  • duration是該動畫動作執行從開始到結束所用的時間;
  • android:repeatCount="infinite"   可以是整數或者infinite
  • android:repeatMode="restart"    可以是restart 或者 reverse
  • android:valueFrom=" "     整數|浮點數|顏色
   

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