android 動畫效果

来源:http://www.cnblogs.com/zhou2016/archive/2016/03/31/5341973.html
-Advertisement-
Play Games

動畫資源 一、分類: (一)、概要: 動畫資源 一、分類: 3.0以前,android支持兩種動畫模式,補間動畫(tween animation),幀動畫(frame animation),在android3.0中又引入了一個新的動畫系統:屬性動畫(property animation)。 這三種動 ...


動畫資源
一、分類: (一)、概要:         3.0以前,android支持兩種動畫模式,補間動畫(tween animation),幀動畫(frame animation),在android3.0中又引入了一個新的動畫系統:屬性動畫(property animation)。         這三種動畫模式在SDK中被稱為view animation,drawable animation,property animation。   (二)、動畫資源分類:
  1. 屬性動畫:Property Animation
  2. 幀動畫:Frame Animation (Drawable Animation)
  3. 補間動畫:Tween Animation (View 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只是表示一個值在一段時間內的改變,當值改變時要做什麼事情完全是你自己決定的。     (二)、常用屬性:
  1. Duration動畫的持續時間,預設300ms。
  2. Time interpolation:時間插值。LinearInterpolator、AccelerateDecelerateInterpolator,定義動畫的變化率。
  3. Repeat count and behavior:重覆次數、以及重覆模式;可以定義重覆多少次;重覆時從頭開始,還是反向。
  4. Animator sets: 動畫集合,你可以定義一組動畫,一起執行或者順序執行。
  5. Frame refresh delay:幀刷新延遲,對於你的動畫,多久刷新一次幀;預設為10ms,但最終依賴系統的當前狀態;基本不用管。
(三)、相關的類:
  1. ObjectAnimator 動畫的執行類
  2. ValueAnimator 動畫的執行類
  3. AnimatorSet 用於控制一組動畫的執行:線性,一起,每個動畫的先後執行等。
  4. AnimatorInflater 用戶載入屬性動畫的xml文件
  5. TypeEvaluator 類型估值,主要用於設置動畫操作屬性的值。
  6. TimeInterpolator 時間插值
  • 總的來說,屬性動畫就是,動畫的執行類來設置動畫操作的對象的屬性、持續時間,開始和結束的屬性值,時間差值等,然後系統會根據設置的參數動態的變化對象的屬性。
  (一)、實例代碼:
一、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=" "     整數|浮點數|顏色
   
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Activity有四種啟動模式: 1. standard,預設的啟動模式,只要激活Activity,就會創建一個新的實例,並放入任務棧中,這樣任務棧中可能同時有一個Activity的多個實例。 2. singleTop,激活Activity時,如果棧頂是這個Activity,就不會創建新的實例;如果 ...
  • Atitit.android js 的鍵盤按鍵檢測Back鍵Home鍵和Menu鍵事件 1. onKeyDown @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEY ...
  • 引子 — 和`@interface` 從一開始學習Objc,我們就“知道”定義一個類時後一種寫法才是正確的。然而如果你試了的話,會發現第一種也是OK的。 言歸正傳 為什麼會有這篇文章呢,源於ReactiveCocoa這個開源庫里定義的幾個巨集: @weakify, @strongify, @WS, @ ...
  • 本文永久鏈接:http://www.cnblogs.com/qianLL/p/5342593.html pod 'AFNetworking', '~>3.0.4' < 第三方 具體他的pod的過過程 http://www.cnblogs.com/qianLL/p/5331624.html 代碼如下 ...
  • 然後我的代碼就按照上面的這個順序輸出。 ...
  • 一、什麼是CocoaPods CocoaPods是iOS項目的依賴管理工具,該項目源碼在Github上管理。開發iOS項目不可避免地要使用第三方開源庫,CocoaPods的出現使得我們可以節省設置和第三方開源庫的時間。在使用CocoaPods之前,開發項目需要用到第三方開源庫的時候,我們需要1.把開 ...
  • 服務端: 首先是編寫一個aidl文件,註意AIDL只支持方法,不能定義靜態成員,並且方法也不能有類似public等的修飾符;AIDL運行方法有任何類型的參數和返回值,在java的類型中,以下的類型使用時不需要導入包(import),基本數據類型、String、Map、List.當然為了避免出錯,建議 ...
  • 在iOS開發中,經常會在APP首頁看到多張圖片進行輪換。剛開始做的時候,感覺很麻煩,不是很好做,查閱資料後,我總結了一下,自己封裝了一個簡單的輪轉圖片庫; UIScrollView無限滑動 ,只需要三個View,左視圖,中視圖,右視圖。無論向左滑動,還是向右滑動,都顯示中間的一個View; ( _s ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...